Re: Creando funciones

From: Guillermo Villanueva <guillermovil(at)gmail(dot)com>
To: Jorge Tornero <jorge(dot)tornero(at)cd(dot)ieo(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Creando funciones
Date: 2010-05-27 12:05:18
Message-ID: AANLkTikxIRAx8AXRjGmwKCxHYV64fyzkwBkXrXRFFHZl@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Jorge, la función se crea correctamente?
En ese caso, probaste de hacer simplemente un:
select (select * from regresion(b.talla,b.peso)) from biologicos b

Sospecho que debe ser así porque tu función refresion es de tipo TABLE

~~~~~~~~~~~~~~~~
Guillermo Villanueva

El 27 de mayo de 2010 06:01, Jorge Tornero <jorge(dot)tornero(at)cd(dot)ieo(dot)es>escribió:

> Hola a todos,
>
> En primer lugar, quisiera presentarme, mi nombre en Jorge Tornero y
> trabajo en un centro de investigación pesquera y pretendo hacer uso de
> Postgresql para mi trabajo, lo que ocurre es que (como siempre) uno se
> encuentra con algunos escollos que intenta salvar, hasta que se le hace
> inevitable preguntar...
>
> Mi problema se centra en crear una función que me haga más sencillo
> obtener los coeficientes de regresión para un conjunto de datos.
>
> En mi caso, los datos de partida se podrían resumir como una columna con
> datos enteros de talla y otra de numeric de peso (aparte de otras
> consultas como fecha de muestreo, etc). Con esos campos y sus
> correspondientes datos, hago una consulta como:
>
> select
> exp(regr_intercept(ln(peso),ln(talla/10.0))),regr_slope(ln(peso),ln(talla/10.0)),regr_r2(ln(peso),ln(talla/10.0))
> from biologicos where talla>0 and peso>0 and espcod='10156' and fecha
> between '2009/04/01' and '2009/6/30';
>
> Lo que me devuelve una "tablita" con los resultados que yo quiero, por
> ejemplo:
>
> exp | regr_slope | regr_r2
> ---------------------+------------------+------------------
> 0.00347024881569587 | 3.27125159141054 | 0.97753903864483
> (1 fila)
>
>
> Ahora bien, lo que quiero es crear una función, por ejemplo:
>
> regresion(parametro1,parametro2)
>
> que me ahorre el
>
>
> exp(regr_intercept(ln(peso),ln(talla/10.0))),regr_slope(ln(peso),ln(talla/10.0)),regr_r2(ln(peso),ln(talla/10.0))
>
> cada vez que hago una consulta y de esta manera las consultas de este
> tipo fueran:
>
> select regresion(talla,peso) from biologicos where.......;
>
>
> para ello, tirando de manuales, he hecho algo así:
>
> DROP FUNCTION IF EXISTS regresion(int,numeric);
> CREATE FUNCTION regresion(int,numeric) RETURNS TABLE(A double, B double,
> R2 double)
> AS $$select
>
> exp(regr_intercept(ln($2),ln($1/10.0))),regr_slope(ln($2),ln($1/10.0)),regr_r2(ln($2),ln($1/10.0))$$
> LANGUAGE SQL;
>
> Que naturalmente me dice 'tararí que te vi'.
>
> Alguien tiene alguna sugerencia de cómo proceder? Sería bastante trivial
> hacer algo en python por ejemplo, pero la cosa es que la función quede
> en el servidor.
>
> Un saludo y gracias
>
>
> --
> -----------------------------------------
> Jorge Tornero Núñez
> Centro Oceanográfico de Cádiz
> Instituto Español de Oceanografía
> Puerto Pesquero - Muelle de Levante, s/n
> 11006 Cádiz - España
> Tel. +34 956294189
> Fax. +34 956294232
> www.ieo.es
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miguel Rodríguez Penabad 2010-05-27 14:03:04 Re: Creando funciones
Previous Message Jorge Tornero 2010-05-27 09:01:58 Creando funciones