case when then else end语句的用法

系统管理员 2024-03-30 15:06 221阅读 0赞

case具有两种格式。简单case函数和case搜索函数。

--简单case函数

case sex

when ‘1’ then ‘男’

when ‘2’ then ‘女’

else ‘其他’ end

--case搜索函数—经常用的是这个

case when sex = ‘1’ then ‘男’

when sex = ‘2’ then ‘女’

else ‘其他’ end

这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。
还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

--比如说,下面这段sql,你永远无法得到“第二类”这个结果

case when col_1 in ( ‘a’, ‘b’) then’第一类’

when col_1 in (‘a’) then ‘第二类’

else ‘其他’ end

这是原始表:
e1d0677d138247419488f82383b6a05c.png

例子一:看下select函数加case函数和不加case函数的区别

不加case函数的,SELECT id,name,core,sex FROM student a ;

b95c5bdafce842e0adc87879a786fe78.png

加case函数的,SELECT (CASE WHEN a.`name`=’张三’ THEN a.core ELSE 0 END) AS ‘张三’ , id,name,core,sex FROM student a ;

42816a40736b4b78842fce02fd506bf3.png

可以看到,加了case函数的就是自己单独成一列,就是比不加多了一列数据,它并不会改变行的数量.

例子二: 介绍下case函数的执行过程.

SELECT (CASE WHEN a.`name`=’张三’ THEN a.core ELSE 0 END) AS ‘张三’ FROM student a ;

上面的执行过程:

进行匹配的是名字name,首先匹配第一行,name是等于张三,所以返回core也就是50
匹配第二行,name等于李四,不匹配,返回else的值也就是0
匹配第三行,name等于王五,不匹配,返回else的值也就是0
匹配第四行,name等于赵六,不匹配,返回else的值也就是0
所以得到结果:

8894addfc67340f9bb2be7a3b44a6647.png

例子三: 看下case函数后面加不加as的区别

先看下加as, SELECT (CASE WHEN a.`name`=’张三’ THEN a.core ELSE 0 END) AS ‘张三’ FROM student a ;

8894addfc67340f9bb2be7a3b44a6647.png

然后是不加as, SELECT (CASE WHEN a.`name`=’张三’ THEN a.core ELSE 0 END) FROM student a ;

d398962329d048dd98f009d337a6510b.png

可以看到, 加as就是对生成的列取个别名, 不加as的话默认的列名就是 case这整个标签.

#

例子四:一列里面多次条件匹配

SELECT (CASE WHEN a.`name`=’张三’ THEN a.core WHEN a.`name`=’李四’ THEN a.core END) AS ‘张三’ FROM student a ;

c4dc5851b16f4c51a5e6ab230c374a8c.png

执行过程:第一行匹配张三成功,返回50,第二行匹配李四成功返回60,三四两行不匹配返回null

例子五:多列的单条件匹配

SELECT (CASE WHEN a.`name`=’张三’ THEN a.core END) AS ‘张三’,(CASE WHEN a.`name`=’李四’ THEN a.core END) AS ‘李四’ FROM student a;

054556d3fb53411cac6e6eeff5c8450b.png

总结case语句能将行转换成列

例子六:实战一

有如下数据:

4e628603f2974031bd121258985ce957.png

根据这个国家人口数据,统计亚洲和北美洲的人口数量。得到下面这个结果:

950bc9021e4f44f58dbc0f13a78a1589.png

查询sql:

select sum(population),

case country

when ‘中国’ then’亚洲’

when ‘印度’ then’亚洲’

when ‘日本’ then’亚洲’

when ‘美国’ then’北美洲’

when ‘加拿大’ then’北美洲’

when ‘墨西哥’ then’北美洲’

else ‘其他’ end

from table_a

group by case country

when ‘中国’ then’亚洲’

when ‘印度’ then’亚洲’

when ‘日本’ then’亚洲’

when ‘美国’ then’北美洲’

when ‘加拿大’ then’北美洲’

when ‘墨西哥’ then’北美洲’

else ‘其他’ end;

例子七:实战二

有如下数据:
fd36875fcad447dcbf9ab268b40a36f5.png

按照国家和性别进行分组,得出结果如下:

4051ce94ba604efbbfab3cac5c3745cd.png

查询sql:

select country,

sum( case when sex = ‘1’ then

population else 0 end), —男性人口

sum( case when sex = ‘2’ then

population else 0 end) —女性人口

from table_a

group by country;

发表评论

表情:
评论列表 (有 0 条评论,221人围观)

还没有评论,来说两句吧...

相关阅读