PostgreSQL中具有多个输入列的用户定义聚合函数
问题描述:
我正在尝试创建使用多个列作为输入并输出单个列的user-defined aggregate functions。PostgreSQL中具有多个输入列的用户定义聚合函数
例如,计算weighted average,我们可能会使用两列名为num_samples
和quantity
,像这样的查询:
SELECT sum(num_samples * quantity)/sum(num_samples) AS weighted_avg FROM table;
不过,我想定义的功能也相当复杂(如加权标准偏差)并被多次使用。我想定义我自己的聚合函数,以便它们可以轻松用于选择查询。例如,如果我想找到的加权平均值和总金额,我会使用一个这样的查询:
SELECT weighted_avg(num_samples, quantity), sum(quantity)
然而,从文档,它看起来像用户定义聚合只允许一个单一的状态变量,但此示例需要两个状态变量:一个用于运行总数quantity
,另一个用于运行总数num_samples
。
是否有可能通过用户定义的聚合函数来实现我想要的,还是有更好的方法?我正在使用PostgreSQL 8.3。
答
来自你的链接:“avg(average)是一个更复杂的聚合例子,它需要两个运行状态:输入的总和和输入的数量最终的结果是通过除以这些数量,平均值通常通过使用两元素数组作为状态值来实现。“
如何做这样的事情?