case when then else end 可以理解为java的if-else if -else。可以理解为流程控制语句或条件控制语句。可以实现资料获取的时候,可以更多的条件和自定义逻辑。
适用情景
对已知的数据库中数据,按照自己的逻辑,进行自定义分组和数据分析用此条件控制语句,实现自定义条件分组条件控制语句中嵌套函数达到理想的计算效果
有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为primary key)
国家(country)
人口(population)
中国
600
美国
100
加拿大
100
英国
200
法国
300
日本
250
德国
200
墨西哥
50
印度
250
根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲
人口
亚洲
1100
北美洲
250
其他
700
想要解决这个问题,假如使用case函数,sql代码如下:
? 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;
有如下数据
国家(country)
性别(sex)
人口(population)
中国
1
340
中国
2
260
美国
1
45
美国
2
55
加拿大
1
51
加拿大
2
49
英国
1
40
英国
2
60
按照国家和性别进行分组,得出结果如下
国家
男
女
中国
340
260
美国
45
55
加拿大
51
49
英国
40
60
普通情况下,用union也可以实现用一条语句进行查询。但是那样增加消耗(两个select部分),而且sql语句会比较长。
下面是一个是用case函数来完成这个功能的例子
? 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;
这样我们使用select,完成对二维表的输出形式,充分显示了case函数的强大。
1、then和else后,只能写一条输出语句且输出结果就是新生成列的值;when 后的条件判断可以有多条,且可以多个字段联合判断;end 后的输出也可以有多条,但必须有一个是新生成列的字段名; [常规用法:select 后到from前,直接使用case when] (例1)
2、when 后多条件判断用and连接(例3)
3、case when 巧妙用法 [order by 后用case when] [count()中用case when] (例2)
4、group by 后用case when (在参考里)
5、case when,如果有多个,如果一条记录满足第一个case when就不会再去执行后面的case when,所以要想保证某个case when一定执行,就把她写在最前面。
到此这篇关于SQL中case when then else end用法的文章就介绍到这了,更多相关SQL case when then else end用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!