MySQL中如何对GROUP BY分组后的求和结果再次求和?
问题描述
现有一张名为animals的表,结构与数据如下:
| name | amount |
|---|---|
| cat | 1 |
| cat | 5 |
| horse | 2 |
已通过以下SQL按name分组计算amount的求和值:
SELECT name,SUM(amount) s FROM animals GROUP BY name;
得到结果:
| name | s |
|---|---|
| cat | 6 |
| horse | 2 |
现在需要对上述结果的s列再次求和,尝试执行以下SQL但无法运行:
SELECT SUM(s),(SELECT name, SUM(amount) s FROM animals GROUP BY name);
错误原因
你把返回多列多行的子查询直接放在SELECT列表中,而SELECT列表中的子查询必须是标量子查询(仅返回单个值),因此触发了语法错误。
正确实现方法
方法1:通过子查询先分组再求和
将分组查询作为临时表,再对其s列求和:
SELECT SUM(s) AS total_sum FROM ( -- 仅保留分组后的求和结果,无需name列 SELECT SUM(amount) s FROM animals GROUP BY name ) AS grouped_result;
执行后会得到结果:total_sum = 8
方法2:直接求和(更高效)
实际上,分组求和后再取总和,等价于直接对原表的amount列求和(因为1+5+2 = 6+2),可以简化为:
SELECT SUM(amount) AS total_sum FROM animals;
此方法无需分组,性能更优,结果与方法1完全一致。
内容的提问来源于stack exchange,提问作者Edris Jafarizada
相关产品推荐
相关产品推荐

