用户定义的聚合函数,PostgreSQL中有多个输入列

del*_*del 10 sql postgresql aggregate-functions

我正在尝试创建使用多列作为输入的用户定义聚合函数,并输出单个列.

例如,计算加权平均值,我们可以使用两列名为num_samplesquantity,像这样的查询:

SELECT sum(num_samples * quantity) / sum(num_samples) AS weighted_avg FROM table; 
Run Code Online (Sandbox Code Playgroud)

但是,我想要定义的函数非常复杂(例如加权标准偏差)并且被多次使用.我想定义自己的聚合函数,以便可以在select查询中轻松使用它们.例如,如果我想找到加权平均值和总和,我会使用如下查询:

SELECT weighted_avg(num_samples, quantity), sum(quantity)
Run Code Online (Sandbox Code Playgroud)

但是,从文档中看,用户定义的聚合看起来只允许使用单个状态变量,但是这个示例需要两个状态变量:一个用于运行总计,quantity一个用于运行总计num_samples.

是否有可能通过用户定义的聚合函数实现我想要的,或者有更好的方法吗?我正在使用PostgreSQL 8.3.

小智 0

从您的链接中:“avg(平均值)是一个更复杂的聚合示例。它需要两个运行状态:输入的总和和输入数量的计数。最终结果是通过将这些数量相除获得的。平均值通常是通过使用二元素数组作为状态值来实现的。”

做这样的事情怎么样?