SQL CASE WHEN 条件表达式
学习 CASE WHEN 条件分支 · 难度:进阶 · +15XP
SQL CASE WHEN 条件表达式
SQL CASE WHEN — 在查询中做条件判断
学习前的准备
你需要一个 MySQL 数据库环境。CASE WHEN 表达式让你在 SQL 中实现“如果...则...否则...”的逻辑判断,类似于编程语言中的 if/else。
搜索式 CASE(最常用)
SELECT
student,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM scores
ORDER BY score DESC;
CASE WHEN 与聚合函数配合(最强大的用法)
-- 统计每个学生各等级的数量
SELECT
student,
COUNT(CASE WHEN score >= 90 THEN 1 END) AS '优秀',
COUNT(CASE WHEN score >= 80 AND score < 90 THEN 1 END) AS '良好',
COUNT(CASE WHEN score < 60 THEN 1 END) AS '不及格'
FROM scores
GROUP BY student;
-- 行转列:各科成绩横向显示
SELECT
student,
MAX(CASE WHEN subject = '数学' THEN score END) AS '数学',
MAX(CASE WHEN subject = '英语' THEN score END) AS '英语',
AVG(score) AS '平均分'
FROM scores
GROUP BY student;
CASE WHEN 在 UPDATE 中使用
UPDATE scores
SET score = score +
CASE
WHEN score >= 90 THEN 2
WHEN score >= 80 THEN 3
WHEN score >= 60 THEN 5
ELSE 10
END;
CASE WHEN 在 ORDER BY 中
SELECT * FROM scores
ORDER BY
CASE subject
WHEN '数学' THEN 1
WHEN '英语' THEN 2
ELSE 3
END,
score DESC;
小结
CASE WHEN 是 SQL 的“条件判断引擎”。配合 COUNT/SUM 实现条件聚合,配合 GROUP BY 实现行转列,在 UPDATE 中做条件更新,在 ORDER BY 中自定义排序。掌握了 CASE WHEN,你就能在数据库中完成以前需要导出到 Excel 才能做的分类统计工作。