首页/数据/数据库速查/GROUP BY 分组统计
本包目录(495 条)
MySQL 基础与连接36 条
SQL 语法52 条
用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条Redis 运维与场景124 条

GROUP BY 分组统计

按一列或多列把行分组并配合聚合函数计算;8.0 默认开启 ONLY_FULL_GROUP_BY,选择列表必须与分组列一致或用聚合函数。

数据库速查数据更新于 2026-10-12
用途分组聚合
语法GROUP BY 列 [WITH ROLLUP]
约束ONLY_FULL_GROUP_BY(默认开启)

基础分组

基础分组
SELECT status, COUNT(*) AS cnt, SUM(amount) AS total
FROM orders
WHERE created_at >= '2026-10-01'
GROUP BY status;

多列分组与小计

多列分组与小计
SELECT DATE(created_at) AS d, status, COUNT(*) AS cnt
FROM orders
GROUP BY d, status WITH ROLLUP
ORDER BY d DESC, status;
分组常伴随临时表或排序;分组键上有索引时(尤其与 WHERE 条件对齐)可显著提速。

易错点

  • SELECT 非聚合列未出现在 GROUP BY 会直接报错(开启 ONLY_FULL_GROUP_BY 时)
  • 分组前 WHERE 过滤比用 HAVING 过滤更高效

数据来源与参考

  • MySQL 8.0 Reference Manual: GROUP BY Optimization

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌