【问题标题】:Nested aggregate functions with grouping in postgresql在 postgresql 中具有分组的嵌套聚合函数
【发布时间】:2012-06-19 19:05:30
【问题描述】:

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

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

也就是说,对于返回的每一行,我希望其中一个字段是总和的平均值,其中每个总和都超过 y 相同的行。

如果可能,我想避免子选择。

【问题讨论】:

  • 如果可能,我想避免子选择”。为什么?

标签: sql postgresql grouping aggregate


【解决方案1】:

你需要一个子查询:

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
  • 我原来的 SQL 语法不正确。它应该有“z”作为内部子查询的分组变量。我刚刚解决了这个问题。
【解决方案2】:

您也可以为此使用Common Table Expression (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

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 2021-10-29
    • 1970-01-01
    • 2020-09-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多