SQL之CASE WHEN用法详解

article/2025/10/2 20:34:11

简单CASE WHEN函数:

CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END
CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END
CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END

 等同于,使用CASE WHEN条件表达式函数实现:

CASE WHEN SCORE = 'A' THEN '优'WHEN SCORE = 'B' THEN '良'WHEN SCORE = 'C' THEN '中' ELSE '不及格' END

 THEN后边的值与ELSE后边的值类型应一致,否则会报错。如下:

CASE SCORE WHEN 'A' THEN '优' ELSE 0 END

'优'和0数据类型不一致则报错: 

[Err] ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 NUMBER

简单CASE WHEN函数只能应对一些简单的业务场景,而CASE WHEN条件表达式的写法则更加灵活。

CASE WHEN条件表达式函数:类似JAVA中的IF ELSE语句。

格式

CASE WHEN condition THEN result[WHEN...THEN...]ELSE resultEND

condition是一个返回布尔类型的表达式,如果表达式返回true,则整个函数返回相应result的值,如果表达式皆为false,则返回ElSE后result的值,如果省略了ELSE子句,则返回NULL

下面介绍几种常用场景。

场景1:有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀

SELECTSTUDENT_NAME,(CASE WHEN score < 60 THEN '不及格'WHEN score >= 60 AND score < 80 THEN '及格'WHEN score >= 80 THEN '优秀'ELSE '异常' END) AS REMARK
FROMTABLE

 注意:如果你想判断score是否null的情况,WHEN score = null THEN '缺席考试',这是一种错误的写法,正确的写法应为:

CASE WHEN score IS NULL THEN '缺席考试' ELSE '正常' END

场景2:现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。

表结构如下:其中STU_SEX字段,0表示男生,1表示女生。

STU_CODESTU_NAMESTU_SEXSTU_SCORE
XM小明088
XL小磊055
XF小峰045
XH小红166
XN晓妮177
XY小伊199
SELECT SUM (CASE WHEN STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_COUNT,SUM (CASE WHEN STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT,SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_PASS,SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_PASS
FROM THTF_STUDENTS

输出结果如下:

MALE_COUNTFEMALE_COUNTMALE_PASSFEMALE_PASS
3313

场景3:经典行转列,并配合聚合函数做统计

现要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条SQL语句输出结果

有能耗表如下:其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗

E_CODEE_VALUE E_TYPE
北京28.500
北京23.511
北京28.122
北京12.300
北京15.461
上海18.880
上海16.661
上海19.990
上海10.050
SELECT E_CODE,SUM(CASE WHEN E_TYPE = 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY,--水耗SUM(CASE WHEN E_TYPE = 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY,--电耗SUM(CASE WHEN E_TYPE = 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY--热耗
FROM THTF_ENERGY_TEST
GROUP BYE_CODE

 输出结果如下:

E_CODEWATER_ENERGYELE_ENERGYHEAT_ENERGY
北京40.8038.9728.12
上海48.9216.660

场景4:CASE WHEN中使用子查询

根据城市用电量多少,计算用电成本。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。

 价格表如下:

P_PRICEP_LEVELP_LIMIT
1.20010
1.70130
2.50250

当能耗值小于10时,使用P_LEVEL=0时的P_PRICE的值,能耗值大于10小于30使用P_LEVEL=1时的P_PRICE的值...

CASE WHEN energy <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 0) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 0)WHEN energy > (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 0) AND energy <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 1) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 1)WHEN energy > (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 1) AND energy <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 2) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 2)

 场景5:结合max聚合函数

CASE WHEN 函数使用起来简单易懂,此篇文章只作了简单的使用介绍,还需在实际工作中根据业务场景不同来灵活使用。


🎉   如果这篇文章对你有帮助,点赞👍  收藏⭐ 关注✅ 哦,创作不易,感谢!😀


http://chatgpt.dhexx.cn/article/qhtMUZ9N.shtml

相关文章

switch case语法

文章目录 switch case组合不要拿青龙偃月刀去削苹果case的作用是什么&#xff1f;break的作用是什么&#xff1f;case后面的值有什么要求吗&#xff1f;case语句的排列顺序问题default语句相关问题使用case语句的一些注意事项 switch case组合 基本语法结构 switch(整型常量/…

SQL中case的使用方法

Case具有两种格式。简单Case函数和Case搜索函数。 1.简单Case函数 CASE sex WHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END2.Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女ELSE 其他 END3.简单case函数 VS case搜索函数 这两种方式&#xff0c;可以实现相同的功…

[转载]常用CASE工具介绍

[转载]常用CASE工具介绍转载自&#xff1a;http://www.cnblogs.com/powerlc/archive/2006/01/12/315959.html 一&#xff0c;概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要。企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. Work…

CASE语句的使用方法

CASE语句有两种&#xff1a; 一种是case [column] when&#xff0c;指定了判断条件所在的列。 另一种是case when [column]&#xff0c;因为条件在子句中所以能对任意列进行判断。 本例建立一个员工表&#xff0c;有员工id&#xff08;id&#xff09;&#xff0c;员工姓名&am…

常用CASE工具介绍 ZZ

常用CASE工具介绍 一&#xff0c;概述  今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要。企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建模。 二&#xff0c;软件开发CASE工具简介   (一)图稿绘制&…

CASE 工具有哪些

CASE 工具 CASE工具设置的软件应用程序。这使用为自动的SDLC活动。 CASE工具所使用的软件项目经理,分析师和工程师开发的软件系统. 有许多CASE工具做软件开发生命周期的各个阶段,如工具,设计工具,项目管理工具,数据库管理工具,文档工具分析. 为了得到所需的结果,CASE工具…

网络:简述路由算法之动态路由算法

网络&#xff1a;简述路由算法之动态路由算法 在计算机网络中&#xff0c;路由器的一个很重要责任就是要在端对端的节点中找出一条最佳路径出来&#xff0c;通过自己与相邻节点之间的信息&#xff0c;来计算出从自己位置到目的节点之间的最佳线路&#xff0c;这种算法我们可以理…

路由选择算法——链路状态算法

好久没写东西了&#xff0c;好生疏的感觉。。 链路状态算法 这是一种全局式的路由选择算法&#xff0c;也就是说&#xff0c;一个路由器知道到其他路由器的所有链路的状态信息&#xff08;例如某条链路上堵不堵&#xff09;&#xff0c;并且假设这种信息是被量化好了的&#…

示例演示“距离矢量路由算法”工作原理

以下内容摘自刚刚上市&#xff0c;已被纳入全国高校教材系统&#xff0c;并在全国热销、好评如潮的《深入理解计算机网络》新书。 7.5.3 距离矢量路由算法 现代计算机网络通常使用动态路由算法&#xff0c;因为这类算法能够适应网络的拓扑和流量变化&#xff0c;其中最流行的…

距离矢量路由算法

现代计算机网络通常使用动态路由算法&#xff0c;因为这类算法能够适应网络的拓扑和流量变化&#xff0c;其中最流行的两种动态路由算法是“距离矢量路由算法”和“链路状态路由算法”。 距离矢量路由算法&#xff08;Distance Vector Routing&#xff0c;DV&#xff09;是ARPA…

路由算法之距离矢量算法和链路状态算法

我们之前说了&#xff0c;路由器需要对于每一对端端节点都要寻找出一个最佳的路径&#xff0c;比如说最小链路成本的路径。路由算法就是通过自己到相邻节点之间的信息来计算出自己到目的地址的最佳出境线路是哪一条&#xff0c;进而进行转发的一类算法。具有代表性的就是距离矢…

路由算法(网络层)

引言 网络层的主要功能是将数据包从源机器路由到目标机器。在大多数是网络中&#xff0c;数据包需要多跳才能到达目的地。唯一一个值得指出的例外是广播网络&#xff0c;但即使在广播网络中&#xff0c;如果源机器和目标机器不在同一个网络段中时&#xff0c;路由仍然是一个问…

路由算法(凑字)

即最短路径问题&#xff0c;说白了还是算法问题&#xff0c;分类有静态动态路由算法&#xff0c;和全局分散路由算法两种。 **静态&#xff1a;**通过手工配置&#xff0c;路由更新慢&#xff0c;但是优先级高。 **动态&#xff1a;**路由更新快&#xff08;定期更新&#xff0…

最佳路由路径选择算法详解

动态路由协议基于运行特征可分为 距离矢量协议&#xff1a;RIP、EIGRP、BGP 链路状态协议&#xff1a;OSPF、ISIS 通用的路由选择算法 1.最长匹配原则 2.管理距离 3.度量值 路由路径选择的时候&#xff0c;最先看最长匹配原则&#xff0c;然后再看管理距离&#xff0c;最…

路由算法

距离矢量路由算法&#xff08;D-V&#xff09; Distance vector routing:动态路由算法&#xff0c;最初应用于ARPANET&#xff0c;后来应用于因特网的RIP协议&#xff08;路由信息协议) &#xff0c;Cisco的IGRP和EIGRP路由协议也是采用DV这种路由算法的。 基本思想 每个结点…

4.2.1 路由算法与路由协议概述(静态路由和动态路由---距离-向量路由算法---链路状态路由算法、层次路由)

文章目录 0.思维导图1.路由算法分类与路由表2.静态路由和动态路由3.动态路由的两种算法&#xff1a;链路状态路由算法和距离向量路由算法4.层次路由 0.思维导图 1.路由算法分类与路由表 路由器转发分组是通过路由表转发的&#xff0c;而路由表是通过各种算法得到的。从能否随网…

路由算法-链路状态路由

路由算法 网络层的主要功能是将数据包从源机器路由到目标机器。在大多数网络中&#xff0c;数据包需要经过多跳才能到达目的地。路由算法和这些算法所用的数据结构是网络层设计的最主要内容。 可以这样想&#xff0c;路由器内部有两个进程。其中一个进程在每个数据包到达的时候…

路由器路由算法

互联网是由路由器连接的网络组合而成的。为了能让数据包正确达地到达目标主机&#xff0c;路由器必须在途中进行正确地转发。这种向“正确的方向”转发数据所进行的处理就叫做路由控制或路由。 路由器根据路由控制表&#xff08;Routing Table&#xff09;转发数据包。它根据所…

距离向量路由算法

一、距离向量路由算法特点 距离向量路由算法是一种迭代的、异步的和分布式的算法。 &#xff08;1&#xff09;分布式&#xff1a;每个节点都从其直接相连邻居接受信息&#xff0c;进行计算&#xff0c;再将计算结果分发给邻居。 &#xff08;2&#xff09;迭代&#xff1a;计…

分簇路由算法 LEACH算法

1.1 什么是分簇路由算法 在无线传感器网络路由算法中&#xff0c;分簇路由算法具有能量消耗低、稳定性高和扩展性好等优点。分簇路由算法中分簇就是分组&#xff0c;即按照特定的应用要求将网络中的所有节点分成不同的小组&#xff0c;每个小组就是一个簇。每个簇由一个簇头和多…