假设我的 子查询
产生了一些列为 (x,y) 的行,我想计算值 avg(abs(x-mean)/y)
。其中 mean
实际上是 avg(x)
。
select avg(abs(x-avg(x))/y) as incline from subquery
失败,因为我无法嵌套聚合函数。我也想不出一种方法来计算子查询中的平均值,同时保留原始结果集。其他方言中存在的 avgdev 函数不能完全帮助我,所以我被困在这里。可能只是由于缺乏 sql 知识——在后处理中从结果集中计算值很容易。
哪个 SQL 构造可以帮助我?
编辑:服务器版本为 8.3.4。此处没有带 WITH
或 OVER
的窗口函数。
最佳答案
不确定我是否理解正确,但您可能正在寻找这样的东西:
SELECT avg(x - mean/y) FROM ( SELECT x, y, avg(x) as mean over(partition by your_grouping_column) FROM your_table ) t
如果您不需要对结果进行分组以获得正确的 avg(x),则只需使用空的 over 省略“分区依据”:over()
关于postgresql - 避免在 PostgreSQL 8.3.4 中嵌套聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565074/