首页/数据/SQL 速查/按表达式或函数分组
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

按表达式或函数分组

分组键可以是表达式:按天/月统计是常见需求;表达式分组通常无法直接用普通索引,可考虑生成列或预聚合。

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

MySQL

MySQL
SELECT DATE(created_at) AS day,
       COUNT(*)        AS orders
FROM orders
GROUP BY DATE(created_at)
ORDER BY day;

PostgreSQL

PostgreSQL
SELECT date_trunc('month', created_at) AS mon,
       COUNT(*)                        AS orders
FROM orders
GROUP BY 1
ORDER BY mon;
支持分组键可为任意表达式
索引表达式分组一般无法走普通索引
优化MySQL 支持表达式索引(8.0.13+)或生成列;PG 支持表达式索引

易错点

  • GROUP BY DATE(col) 时 WHERE 也要用同样的表达式形态,否则索引与语义都可能对不上
  • 跨时区业务先统一存储时区再按天分组,否则日界会漂移

数据来源与参考

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