CASE WHEN语句在MySQL中用于条件判断,支持SELECT、UPDATE、WHERE和ORDER BY等场景,有两种语法形式:简单CASE表达式和搜索型CASE表达式;在SELECT中可实现分数转等级,如根据score字段返回“优秀”“良好”等;在ORDER BY中可通过数值映射实现自定义排序;在UPDATE中可批量按条件更新字段值;需注意条件顺序影响结果,一旦匹配则停止后续判断,因此高优先级条件应前置,避免逻辑覆盖。

在MySQL中,CASE WHEN语句用于实现条件判断,类似于编程语言中的if-else逻辑。它可以在SELECT、UPDATE、WHERE等语句中使用,帮助根据不同的条件返回不同的值。
MySQL中CASE WHEN有两种写法:
1. 简单CASE表达式(类比switch-case)
CASE value
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE result
END
2. 搜索型CASE表达式(支持复杂条件)
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result
END
其中,ELSE是可选的,如果没有匹配项且未指定ELSE,则返回NULL。
假设有一张学生表 students,包含字段 score,我们想根据分数划分等级:
SELECT
name,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM students;
这条语句会为每个学生计算出对应的等级。
有时需要按自定义顺序排序。例如,想按“优秀 > 良好 > 及格 > 不及格”的顺序显示数据:
SELECT
name,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM students
ORDER BY
CASE
WHEN score >= 90 THEN 1
WHEN score >= 80 THEN 2
WHEN score >= 60 THEN 3
ELSE 4
END;
可以根据条件批量更新数据。例如,将成绩等级写入新字段:
UPDATE students SET level =
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END;
CASE WHEN 是按顺序执行的,一旦满足某个条件就停止后续判断。因此条件的排列顺序很重要。
比如下面这个例子会有问题:
CASE
WHEN score > 0 THEN '正数'
WHEN score > 50 THEN '高分' -- 永远不会被执行
ELSE '零或负数'
END
因为大于50的数也大于0,所以第二个条件无法命中。应调整顺序:
CASE
WHEN score > 50 THEN '高分'
WHEN score > 0 THEN '正数'
ELSE '零或负数'
END
基本上就这些。CASE WHEN语句灵活实用,掌握后能显著提升SQL的表达能力。不复杂但容易忽略细节。
以上就是mysql中CASE WHEN语句如何书写_mysql CASE WHEN使用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号