首页/数据/SQL 速查/条件聚合(多种口径一次算出)
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

条件聚合(多种口径一次算出)

用 CASE/布尔表达式在聚合内部区分条件,一条 SQL 同时算出多个指标,避免多次扫描同一张表。

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

示例

示例
SELECT DATE(created_at) AS day,
       COUNT(*)                                        AS total,
       SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END)     AS paid,
       SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END)     AS refunded,
       SUM(CASE WHEN status = 1 THEN amount ELSE 0 END) AS paid_amount
FROM orders
GROUP BY DATE(created_at)
ORDER BY day;
技巧SUM(CASE WHEN … THEN 1 ELSE 0 END) 计数;带金额则替换为列
MySQL 简写布尔表达式可直接 SUM
收益一次扫描得到多指标

易错点

  • MySQL 里 SUM(cond) 依赖布尔转 0/1,跨库 SQL 统一用 CASE 更稳
  • 条件之间要互斥或显式处理重叠,否则多个指标相加与总数对不上

数据来源与参考

  • MySQL 8.0 Reference Manual · CASE
  • PostgreSQL Documentation · Aggregate Expressions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌