我正在尝试使用嵌套聚合函数和分组来获取总和的平均值。我的需求是:
SELECT AVG(SUM(x) GROUP BY y) WHERE ... GROUP BY ...;
换言之,对于每行返回的结果,我需要其中一个字段是各个总和的平均值,其中每个总和都是在 y 相同的行上进行的。
如果可能的话,我想要避免使用子查询。
我正在尝试使用嵌套聚合函数和分组来获取总和的平均值。我的需求是:
SELECT AVG(SUM(x) GROUP BY y) WHERE ... GROUP BY ...;
换言之,对于每行返回的结果,我需要其中一个字段是各个总和的平均值,其中每个总和都是在 y 相同的行上进行的。
如果可能的话,我想要避免使用子查询。
您需要一个子查询:
select z, avg(sumval)
from (select y, z, sum(x) as sumval
from t
group by y, z
) t
group by 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你也可以使用公共表达式(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
使用 over() 子句:
SELECT y, AVG(SUM(x)) OVER(partition by y) WHERE ... GROUP BY ...;