You need to enable JavaScript to run this app. SQL如何同时输出分类合计值与各子分类单独统计结果
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何同时输出分类合计值与各子分类单独统计结果

实现方案

方案1:通用UNION ALL写法(兼容所有SQL数据库)

无需依赖数据库高阶特性,所有版本的MySQL、PostgreSQL、Oracle等都可直接使用:

-- 合计行查询
SELECT 'CAT' AS categories, SUM(number_units) AS `sum`
FROM 你的实际表名
WHERE categories LIKE 'CAT%'
UNION ALL
-- 子分类行查询
SELECT categories, SUM(number_units) AS `sum`
FROM 你的实际表名
WHERE categories LIKE 'CAT%'
GROUP BY categories
-- 排序控制合计行展示在最顶部
ORDER BY CASE WHEN categories = 'CAT' THEN 1 ELSE 2 END, categories

注意把你的实际表名替换为自己的表名即可,使用UNION ALL而非UNION可避免去重逻辑,查询性能更高。

方案2:高阶聚合写法(支持MySQL8.0+/PostgreSQL/Oracle等现代数据库)

仅需扫描一次表,性能比UNION方案更好:

GROUPING SETS写法

SELECT 
  COALESCE(categories, 'CAT') AS categories,
  SUM(number_units) AS `sum`
FROM 你的实际表名
WHERE categories LIKE 'CAT%'
GROUP BY GROUPING SETS ((), (categories))
ORDER BY CASE WHEN categories = 'CAT' THEN 1 ELSE 2 END, categories

GROUPING SETS中()代表全局合计维度,(categories)代表子分类聚合维度,一次查询即可返回两种聚合结果,COALESCE用于将合计行的空分类值替换为CAT。

MySQL专属WITH ROLLUP写法

SELECT 
  IFNULL(categories, 'CAT') AS categories,
  SUM(number_units) AS `sum`
FROM 你的实际表名
WHERE categories LIKE 'CAT%'
GROUP BY categories WITH ROLLUP
ORDER BY CASE WHEN categories = 'CAT' THEN 1 ELSE 2 END, categories

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:15:08