我正在尝试创建自定义聚合函数,这些函数使用多个列作为输入,并输出单个列。
例如,要计算加权平均值,我们可能会使用名为num_samples
和quantity
的两个列,使用以下查询:
SELECT sum(num_samples * quantity) / sum(num_samples) AS weighted_avg FROM table;
不过,我想要定义的函数相当复杂(例如加权标准差),并且会被多次使用。我希望定义自己的聚合函数,以便它们可以轻松地在select查询中使用。例如,如果我想要查找加权平均和总和,我将使用以下查询:
SELECT weighted_avg(num_samples, quantity), sum(quantity)
然而,从文档中可以看出,用户定义的聚合只允许一个状态变量,但这个示例需要两个状态变量:一个用于quantity
的累加和一个用于num_samples
的累加和。
是否可能使用用户定义的聚合函数实现我的目标,或者有更好的方法?我正在使用PostgreSQL 8.3。