2026/2/10 19:44:37
网站建设
项目流程
做编程的网站有哪些,wordpress详情页,北京百度推广投诉电话,做网站还有钱赚吗SQL 中 CASE WHEN 用法全面详解
CASE WHEN 是 SQL 中非常强大的条件判断表达式#xff0c;类似于编程语言中的 if-else 或 switch 语句。它可以根据条件返回不同的值#xff0c;常用于数据转换、分组统计、动态排序等场景。
SQL 中有两种 CASE 语法#xff1a;
1. 简单 C…SQL 中 CASE WHEN 用法全面详解CASE WHEN是 SQL 中非常强大的条件判断表达式类似于编程语言中的if-else或switch语句。它可以根据条件返回不同的值常用于数据转换、分组统计、动态排序等场景。SQL 中有两种 CASE 语法1. 简单 CASE类似 switchCASE表达式WHEN值1THEN结果1WHEN值2THEN结果2...ELSE默认结果END2. 搜索 CASE更常用类似 if-elseif-elseCASEWHEN条件1THEN结果1WHEN条件2THEN结果2...ELSE默认结果END注意END是必须的否则报错。ELSE可省略省略时相当于ELSE NULL。一、基本用法示例假设有表studentsidnamescore1张三852李四623王五954赵六455nullnull示例1根据分数划分等级搜索 CASE最常用SELECTname,score,CASEWHENscore90THEN优秀WHENscore80THEN良好WHENscore60THEN及格ELSE不及格ENDASgradeFROMstudents;结果namescoregrade张三85良好李四62及格王五95优秀赵六45不及格nullnull不及格因为 NULL 不满足任何条件示例2简单 CASE匹配具体值SELECTname,score,CASEscoreWHEN100THEN满分WHEN0THEN零分ELSE普通分数ENDASremarkFROMstudents;示例3处理 NULL 值SELECTname,CASEWHENscoreISNULLTHEN未考试WHENscore60THEN通过ELSE未通过ENDASstatusFROMstudents;示例4在 ORDER BY 中动态排序超级实用-- 优先让 score100 的排最前其余按 score 降序SELECTname,scoreFROMstudentsORDERBYCASEWHENscore100THEN0ELSE1END,-- 100分排前面scoreDESC;示例5在 UPDATE 中使用修改数据UPDATEstudentsSETgradeCASEWHENscore90THENAWHENscore80THENBWHENscore60THENCELSEFEND;示例6结合聚合函数统计分组统计神器SELECTCASEWHENscore90THEN优秀WHENscore60THEN及格ELSE不及格ENDASlevel,COUNT(*)AScount,AVG(score)ASavg_scoreFROMstudentsGROUPBYCASEWHENscore90THEN优秀WHENscore60THEN及格ELSE不及格END;结果示例levelcountavg_score优秀195.0良好185.0及格162.0不及格145.0示例7多条件组合AND/ORCASEWHENscore90ANDnameLIKE张%THEN优秀且姓张WHENscore80ORscoreISNULLTHEN良好或未考ELSE其他END示例8嵌套 CASE不推荐过多嵌套可读性差CASEWHENscoreISNULLTHEN未考ELSECASEWHENscore90THEN优秀ELSE非优秀ENDEND二、常见注意事项注意点说明类型一致所有THEN和ELSE的结果类型必须一致都是字符串或数字NULL 判断用IS NULL/IS NOT NULL不能用 NULL条件执行顺序从上到下满足第一个条件就返回后面的不再判断可在 SELECT/WHERE/GROUP BY/ORDER BY/HAVING 中使用全方位可用MySQL 支持在 WHERE 中直接用 CASE但建议逻辑放 SELECT 中更清晰性能过多复杂 CASE 可能影响性能必要时考虑建视图或存储过程三、实际应用场景总结场景推荐用法数据清洗/转换将代码转为可读文字如 status 1→’启用’动态分组统计按条件分组 COUNT/SUM/AVG自定义排序规则ORDER BY CASE …报表字段生成生成“等级”“是否达标”等衍生列权限控制展示根据角色显示不同内容掌握CASE WHEN后你的 SQL 查询能力会提升一个大台阶它几乎是写复杂报表和数据分析 SQL 的必备武器。如果你有具体业务场景如“如何用 CASE WHEN 实现 pivot 表格”或“多表联查中的条件判断”欢迎继续提问我可以给出针对性示例