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
这是原始表:
不加case函数的,SELECT id,name,core,sex FROM student a ;
加case函数的,SELECT (CASE WHEN a.`name`='张三' THEN a.core ELSE 0 END) AS '张三' , id,name,core,sex FROM student a ;
可以看到,加了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
所以得到结果:
先看下加as, SELECT (CASE WHEN a.`name`='张三' THEN a.core ELSE 0 END) AS '张三' FROM student a ;
然后是不加as, SELECT (CASE WHEN a.`name`='张三' THEN a.core ELSE 0 END) FROM student a ;
可以看到, 加as就是对生成的列取个别名, 不加as的话默认的列名就是 case这整个标签.
SELECT (CASE WHEN a.`name`='张三' THEN a.core WHEN a.`name`='李四' THEN a.core END) AS '张三' FROM student a ;
执行过程:第一行匹配张三成功,返回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;
总结case语句能将行转换成列
有如下数据:
根据这个国家人口数据,统计亚洲和北美洲的人口数量。得到下面这个结果:
查询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;
有如下数据:
按照国家和性别进行分组,得出结果如下:
查询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;
到此这篇关于case when then else end语句的用法(附demo)的文章就介绍到这了,更多相关case when then else end内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!