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

CASE WHEN 条件表达式

在 SQL 内做分支:简单 CASE 对值比较,搜索 CASE 对条件判断;常用于分桶统计与结果转义,也是行列转换的基础。

数据库速查数据更新于 2026-10-12
用途条件分支与映射
两种形式CASE 值 WHEN … / CASE WHEN 条件 …
可嵌套是

分桶统计

分桶统计
SELECT
  CASE WHEN amount >= 1000 THEN 'high'
       WHEN amount >= 100  THEN 'mid'
       ELSE 'low' END AS bucket,
  COUNT(*) AS cnt
FROM orders
GROUP BY bucket;

行列转换(透视)

行列转换(透视)
SELECT user_id,
  SUM(CASE WHEN status='paid' THEN amount ELSE 0 END) AS paid_amt,
  SUM(CASE WHEN status='refund' THEN amount ELSE 0 END) AS refund_amt
FROM orders GROUP BY user_id;
CASE 从上到下命中即返回,条件顺序会影响结果;用于索引列会阻断索引,尽量放在 SELECT 或分组计算里。

易错点

  • 忘记 ELSE 时未命中分支返回 NULL,参与求和会静默变 NULL
  • CASE WHEN 作为 WHERE/ORDER BY 条件时索引基本失效

数据来源与参考

  • MySQL 8.0 Reference Manual: CASE Expression

相关工具

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