postgresql - 避免在 PostgreSQL 8.3.4 中嵌套聚合函数

标签 postgresql aggregate-functions

假设我的 子查询 产生了一些列为 (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。此处没有带 WITHOVER 的窗口函数。

最佳答案

不确定我是否理解正确,但您可能正在寻找这样的东西:

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/

相关文章:

sql - 在 PostgreSQL 中重用存储过程结果

postgresql - 适用于 Windows 的 postgresql 客户端好吗?

json - 在 Postgres 9.3+ 中将 JSON 转换为 HSTORE?

sql - 如何模拟索引 View 中的不同计数?

mysql - SQL 仅选择列上具有最大值的行

mysql - SQL-如何在聚合操作期间获取每组重复次数最多的文本值?

sql - 计算 postgresql 矩阵中列的组合

postgresql - 案例陈述是否支持引发异常?

android - 计算 SQLITE 中单条记录的百分比

mysql - 从mysql查询获取子节点数