怎样在SQL中实现类似Excel数据透视表的分组汇总?

雨辰君_3519

雨辰君_3519

2026-09-24

797人浏览

原创

直接用group by+聚合函数就能实现核心功能,无需额外工具;行维度放group by,值字段套sum/count等聚合函数,列维度用case when+聚合手动展开,并注意else 0处理null、多维分组需同步写入group by和select。

怎样在sql中实现类似excel数据透视表的分组汇总?

直接用 GROUP BY + 聚合函数就能实现核心功能,不需要额外工具或存储过程。

GROUP BY 做基础行列分组汇总

Excel 透视表的“行标签+列标签+值汇总”在 SQL 中对应的是多字段 GROUP BYSUM()COUNT() 等聚合函数。关键不是“模仿界面”,而是明确你要按哪些维度切分数据、对哪列做统计。

常见错误是只写一个分组字段却想看多个维度交叉结果,比如想按部门和年份统计销售额,却只写 GROUP BY department —— 这会导致年份信息被压缩掉,无法区分各年变化。

  • 要同时按部门和年份分组:必须写 GROUP BY department, YEAR(order_date)
  • 聚合字段不能出现在 SELECT 中却不参与分组或聚合,否则多数数据库(如 MySQL 5.7+、PostgreSQL)会报错 ERROR 1055
  • MySQL 8.0+ 默认开启 ONLY_FULL_GROUP_BY,这点比旧版更严格,也更符合 SQL 标准

CASE WHEN + SUM() 实现“列展开”(类似透视列)

Excel 里把“产品类别”拖到列区域,就自动变成 A列=手机、B列=电脑 的横向结构 —— SQL 没有原生“动态列”语法,但可以用条件聚合硬编码实现静态列展开。

Excel Auto Clean
Excel Auto Clean

自动整理Excel表格、去重、排序、生成报表

下载

这种写法本质是:对每一行,判断它属于哪个类别,属于就取值,否则取 0,再整体求和。

SELECT
  region,
  SUM(CASE WHEN product = '手机' THEN sales ELSE 0 END) AS 手机,
  SUM(CASE WHEN product = '电脑' THEN sales ELSE 0 END) AS 电脑,
  SUM(CASE WHEN product = '平板' THEN sales ELSE 0 END) AS 平板
FROM orders
GROUP BY region;
  • 注意 ELSE 0 很重要:不写会导致该行对应列为 NULLSUM() 会跳过 NULL,结果偏小
  • 类别必须提前知道且数量有限;如果产品种类太多或经常变动,这种写法维护成本高,不如在应用层处理
  • PostgreSQL 可用 FILTER 语法替代(如 SUM(sales) FILTER (WHERE product = '手机')),语义更清晰,但 MySQL 不支持

避免用 PIVOT(除非你确定数据库支持且场景匹配)

SQL Server 和 Oracle 有 PIVOT 关键字,看起来更像 Excel,但实际使用限制多、可读性差、调试困难。

比如 SQL Server 的 PIVOT 要求聚合列必须是单值,且列名必须写死,还容易和子查询嵌套出错。出问题时错误信息往往指向“无效的列名”,而不是告诉你哪步逻辑错了。

  • MySQL 完全不支持 PIVOT,别搜教程硬套
  • SQLite、PostgreSQL 也不支持标准 PIVOT,有些第三方扩展提供类似功能,但稳定性和兼容性没保障
  • 真正需要动态列(比如用户自选维度)的场景,应该交给 BI 工具(如 Metabase、Superset)或后端代码生成 SQL,而不是在 SQL 层强行模拟

最易被忽略的一点:GROUP BY 的字段顺序会影响结果排序,但不保证输出顺序 —— 如果你需要固定行列顺序(比如年份从 2021 到 2024),必须显式加 ORDER BY;另外,空值(NULL)在分组中会被单独归为一组,如果业务上“未填部门”和“其他部门”含义不同,得提前用 COALESCE(department, '未知') 处理。

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

4076

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1209

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

223

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

426

22

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

3743

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

791

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

969

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

5521

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

2523

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 43.3万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.5万人学习