2011-04-15 21 views
7

Estoy tratando de crear user-defined aggregate functions que usen varias columnas como entrada y obtengan una sola columna.Funciones agregadas definidas por el usuario con columnas de entrada múltiples en PostgreSQL

Por ejemplo, para calcular un weighted average, podríamos utilizar dos columnas llamadas num_samples y quantity, con una consulta como esta:

SELECT sum(num_samples * quantity)/sum(num_samples) AS weighted_avg FROM table; 

Sin embargo, las funciones que desea definir son bastante complejos (por ejemplo, normal ponderado desviación) y se usan muchas veces. Me gustaría definir mis propias funciones agregadas para que se puedan usar fácilmente en las consultas de selección. Por ejemplo, si quería encontrar la media ponderada y la suma total, que haría uso de una consulta como esta:

SELECT weighted_avg(num_samples, quantity), sum(quantity) 

Sin embargo, a partir de la documentación que se parece a los agregados definidos por el usuario sólo se les permite una única variable de estado , pero este ejemplo requerirá dos variables de estado: una para el total acumulado de quantity y otra para el total acumulado de num_samples.

¿Es posible lograr lo que quiero con las funciones agregadas definidas por el usuario, o hay una forma mejor? Estoy usando PostgreSQL 8.3.

Respuesta

0

Desde tu enlace: "avg (average) es un ejemplo más complejo de un agregado. Requiere dos partes del estado de ejecución: la suma de las entradas y el recuento de las entradas. El resultado final se obtiene dividiendo estas cantidades. El promedio se implementa típicamente mediante el uso de una matriz de dos elementos como el valor del estado ".

¿Qué tal si hacemos algo como eso?

Cuestiones relacionadas