2012-06-19 79 views
7

我试图使用嵌套的聚合函数和分组获得平均和。我希望做的是:在postgresql中使用分组的嵌套聚合函数

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

也就是说,返回的每个行,我想其中一个字段是一个平均总和,其中每个总和超过其中y是相同的行。

如果可能,我想避免子查询。

+0

“*我想如果可能的话*避免子查询”。为什么? –

回答

12

你需要一个子查询:

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

但是对于返回的每一行,我得到不同的z值和相同的平均值。这不是我想要的行为;对于每个z值,我想得到特定于该z值的相应的总和的平均值。例如,如果我的数据是 'XYZ 10 AG 15 AG 7 BG 8啊 12 BH 18 bh' 我期望已返回 'Z,平均 克16 H 19 ' – ferson2020

+0

我的原始SQL在语法上不正确。它应该在内部子查询中具有“z”作为分组变量。我只是修正了这一点。 –

+0

感谢您的帮助。 – ferson2020