PostgreSQL中带分组的嵌套聚合函数

12

我正在尝试使用嵌套聚合函数和分组来获取总和的平均值。我的需求是:

SELECT AVG(SUM(x) GROUP BY y) WHERE ... GROUP BY ...;

换言之,对于每行返回的结果,我需要其中一个字段是各个总和的平均值,其中每个总和都是在 y 相同的行上进行的。

如果可能的话,我想要避免使用子查询。


1
“如果可能的话,我想避免使用子查询。”为什么呢? - user330315
3个回答

25

您需要一个子查询:

select z, avg(sumval)
from (select y, z, sum(x) as sumval
      from t
      group by y, z
     ) t
group by z

但是对于每个返回的行,我得到一个不同的z值和相同的平均值。这不是我想要的行为;对于每个z值,我想要得到相应的特定于该z值的总和的平均值。例如,如果我的数据是 `x y z 10 a g 15 a g 7 b g 8 a h 12 b h 18 b h`我希望返回 `z, average g 16 h 19` - ferson2020
1
我的原始SQL语句在语法上是错误的。它在内部子查询中应该有"z"作为分组变量。我刚刚修复了这个问题。 - Gordon Linoff

0

你也可以使用公共表达式(CTE)

WITH tmp AS (
    SELECT y, z, sum(x) as sumval
    FROM t
    GROUP BY y, z
)
SELECT z, avg(sumval)
FROM tmp
GROUP BY z

0

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