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.