news 2026/7/27 16:59:20

SQL之CASE WHEN用法详解_sql case when

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL之CASE WHEN用法详解_sql case when

SQL 中 CASE WHEN 用法全面详解

CASE WHEN是 SQL 中非常强大的条件判断表达式,类似于编程语言中的if-elseswitch语句。它可以根据条件返回不同的值,常用于数据转换、分组统计、动态排序等场景。

SQL 中有两种 CASE 语法:

1. 简单 CASE(类似 switch)
CASE表达式WHEN1THEN结果1WHEN2THEN结果2...ELSE默认结果END
2. 搜索 CASE(更常用,类似 if-elseif-else)
CASEWHEN条件1THEN结果1WHEN条件2THEN结果2...ELSE默认结果END

注意END是必须的!否则报错。ELSE可省略,省略时相当于ELSE NULL


一、基本用法示例

假设有表students

idnamescore
1张三85
2李四62
3王五95
4赵六45
5nullnull
示例1:根据分数划分等级(搜索 CASE,最常用)
SELECTname,score,CASEWHENscore>=90THEN'优秀'WHENscore>=80THEN'良好'WHENscore>=60THEN'及格'ELSE'不及格'ENDASgradeFROMstudents;

结果:

namescoregrade
张三85良好
李四62及格
王五95优秀
赵六45不及格
nullnull不及格(因为 NULL 不满足任何条件)
示例2:简单 CASE(匹配具体值)
SELECTname,score,CASEscoreWHEN100THEN'满分'WHEN0THEN'零分'ELSE'普通分数'ENDASremarkFROMstudents;
示例3:处理 NULL 值
SELECTname,CASEWHENscoreISNULLTHEN'未考试'WHENscore>=60THEN'通过'ELSE'未通过'ENDASstatusFROMstudents;
示例4:在 ORDER BY 中动态排序(超级实用!)
-- 优先让 score=100 的排最前,其余按 score 降序SELECTname,scoreFROMstudentsORDERBYCASEWHENscore=100THEN0ELSE1END,-- 100分排前面scoreDESC;
示例5:在 UPDATE 中使用(修改数据)
UPDATEstudentsSETgrade=CASEWHENscore>=90THEN'A'WHENscore>=80THEN'B'WHENscore>=60THEN'C'ELSE'F'END;
示例6:结合聚合函数统计(分组统计神器)
SELECTCASEWHENscore>=90THEN'优秀'WHENscore>=60THEN'及格'ELSE'不及格'ENDASlevel,COUNT(*)AScount,AVG(score)ASavg_scoreFROMstudentsGROUPBYCASEWHENscore>=90THEN'优秀'WHENscore>=60THEN'及格'ELSE'不及格'END;

结果示例:

levelcountavg_score
优秀195.0
良好185.0
及格162.0
不及格145.0
示例7:多条件组合(AND/OR)
CASEWHENscore>=90ANDnameLIKE'张%'THEN'优秀且姓张'WHENscore>=80ORscoreISNULLTHEN'良好或未考'ELSE'其他'END
示例8:嵌套 CASE(不推荐过多嵌套,可读性差)
CASEWHENscoreISNULLTHEN'未考'ELSECASEWHENscore>=90THEN'优秀'ELSE'非优秀'ENDEND

二、常见注意事项

注意点说明
类型一致所有THENELSE的结果类型必须一致(都是字符串或数字)
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 表格”或“多表联查中的条件判断”),欢迎继续提问,我可以给出针对性示例!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 9:27:26

计算机视觉项目首选环境:PyTorch-CUDA-v2.8镜像实测推荐

PyTorch-CUDA-v2.8 镜像:计算机视觉项目的高效开发利器 在现代深度学习项目中,尤其是计算机视觉方向,一个稳定、开箱即用的开发环境往往决定了从原型验证到生产部署的速度。尽管 PyTorch 因其动态图设计和强大生态广受青睐,CUDA 提…

作者头像 李华
网站建设 2026/7/16 7:56:52

终身学习:构建能持续进化的AI Agent

终身学习:构建能持续进化的AI Agent 关键词:终身学习、AI Agent、持续进化、机器学习、知识更新、元学习、强化学习 摘要:本文聚焦于构建能持续进化的AI Agent这一前沿主题,深入探讨了终身学习在AI领域的重要性。详细介绍了相关核心概念,如AI Agent和终身学习的原理与联系…

作者头像 李华
网站建设 2026/7/19 19:02:24

HuggingFace Trainer自定义训练循环:超越默认封装

HuggingFace Trainer自定义训练循环:超越默认封装 在深度学习的实际项目中,我们常常会遇到这样的场景:一个基于 BERT 的文本分类模型已经用 Trainer 快速跑通了 baseline,但接下来想要引入对比学习增强语义表示、或者同时微调多个…

作者头像 李华
网站建设 2026/7/22 12:36:38

长期投资在波动市场中的优势

长期投资在波动市场中的优势 关键词:长期投资、波动市场、投资优势、资产配置、复利效应 摘要:本文聚焦于长期投资在波动市场中的优势。通过深入剖析波动市场的特点以及长期投资的核心原理,从多个角度阐述了长期投资在应对市场波动时所展现出的独特优势。详细介绍了相关的数…

作者头像 李华
网站建设 2026/7/17 3:58:24

YOLOv11锚框设计调整:适应不同尺度目标检测

YOLOv11锚框设计调整:适应不同尺度目标检测 在智能交通系统中,一辆自动驾驶汽车需要同时识别远处的行人、近处的车辆以及空中悬停的无人机。这些目标尺寸差异巨大——从几十像素的小人影到占据画面三分之一的大卡车——对检测模型的多尺度感知能力提出了…

作者头像 李华
网站建设 2026/7/20 4:05:05

使用GitHub Pages搭建个人技术博客:分享PyTorch心得

使用GitHub Pages搭建个人技术博客:分享PyTorch心得 在深度学习领域,一个常见的困境是:你刚刚在网上找到一篇令人兴奋的教程,满心欢喜地准备复现结果,却卡在了环境配置的第一步——CUDA版本不匹配、PyTorch安装失败、…

作者头像 李华