繁体   English   中英

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

[英]User-defined aggregate functions with multiple input columns in PostgreSQL

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

例如,要计算加权平均值 ,我们可能会使用名为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。

请参阅: 如何创建自列 PostgreSQL 8.2以来可用的多列聚合

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

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

做那样的事情怎么样?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM