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

10

我正在尝试创建自定义聚合函数,这些函数使用多个列作为输入,并输出单个列。

例如,要计算加权平均值,我们可能会使用名为num_samplesquantity的两个列,使用以下查询:

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。

2个回答

2

参见此链接:如何创建多列聚合函数,该功能从PostgreSQL 8.2版本开始提供。

至于多个状态变量,正如Jack所说,您可以使用数组作为状态变量。


0

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

这样做怎么样?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接