You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL使用GROUP BY分组时如何同时返回分组汇总与总合计行?

实现方案

有两种常用的实现方式,可根据你使用的数据库类型选择:

方案1:使用ROLLUP扩展聚合语法(性能更优)

这是SQL标准支持的聚合扩展功能,仅需扫描一次表,执行效率更高,不同数据库的语法细节略有差异:

MySQL 写法

SELECT IFNULL(name, 'Total') AS name, SUM(amount) AS balance
FROM `table`
GROUP BY name WITH ROLLUP;

PostgreSQL/Oracle 写法

SELECT COALESCE(name, 'Total') AS name, SUM(amount) AS balance
FROM "table"
GROUP BY ROLLUP(name);

说明:ROLLUP会自动在分组结果末尾追加全局聚合行,该行的name字段默认返回NULL,因此用IFNULL/COALESCE函数将NULL替换为自定义的Total标识即可。

方案2:使用UNION ALL拼接结果(全版本兼容)

如果你的数据库不支持ROLLUP语法,可以用UNION ALL手动拼接分组结果和总计行,所有SQL环境都支持该写法:

SELECT name, SUM(amount) AS balance
FROM `table`
GROUP BY name
UNION ALL
SELECT 'Total' AS name, SUM(amount) AS balance
FROM `table`;

说明:该写法会两次扫描表,数据量较大时执行效率低于ROLLUP方案。

注意:table是SQL保留关键字,作为表名使用时需要用对应数据库的标识符包裹(MySQL用反引号`,PostgreSQL/Oracle用双引号"),避免触发语法错误。

内容的提问来源于stack exchange,提问作者js_new

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:15:03