[英]User-defined aggregate functions with multiple input columns in PostgreSQL
我正在尝试创建使用多列作为输入的用户定义聚合函数 ,并输出单个列。
例如,要计算加权平均值 ,我们可能会使用名为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。
从您的链接:“avg(average)是一个更复杂的聚合示例。它需要两个运行状态:输入的总和和输入数量的计数。最终结果是通过除以这些数量得到的。平均值通常通过使用双元素数组作为状态值来实现。“
做那样的事情怎么样?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.