首页/数据/SQL 速查/GROUPING SETS 与 CUBE(PostgreSQL)
聚合与窗口函数54 条

GROUPING SETS 与 CUBE(PostgreSQL)

一条查询同时产出多种分组口径:PostgreSQL 支持 GROUPING SETS 与 CUBE;MySQL 8 只有 ROLLUP。

SQL 速查数据更新于 2026-10-12

PostgreSQL

PostgreSQL
SELECT city, status, COUNT(*) AS cnt
FROM users
GROUP BY GROUPING SETS ((city), (status), ());

SELECT city, status, COUNT(*) AS cnt
FROM users
GROUP BY CUBE (city, status);
GROUPING SETS显式列出需要的分组组合
CUBE所有列组合的全排列
MySQL不支持这两个语法,需要 UNION ALL 多条分组查询拼装

易错点

  • GROUPING SETS 的每个组合都会各自扫描/聚合,大数据集注意成本
  • MySQL 需要 UNION ALL 模拟时保证各分支列与类型一致,并自行补“合计”标签

数据来源与参考

  • PostgreSQL Documentation · GROUPING SETS
  • MySQL 8.0 Reference Manual · GROUP BY Modifiers
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌