CASE表达式

虽然立志成为一名数据分析师,但是Sql方面的知识已经忘得差不多了。由于最近比较有空,在日常学习外还会阅读《SQL进阶教程》这本书,学习后写博客记录。

CASE表达式

1.CASE表达式的分类
CASE表达式分为简单CASE表达式和搜索CASE表达式,二者形式如下:

--简单CASE表达式
CASE 博主
WHEN 会写SQL THEN 可以成为数据分析师
WHEN 会写JAVA THEN 也许可以成为数据分析师
ELSE 绝对不能成为数据分析师
END
CASE 
WHEN 博主会写SQL THEN 可以成为数据分析师
WHEN 博主会写JAVA THEN 也许可以成为数据分析师
ELSE 绝对不能成为数据分析师
END

二者之间的区别显而易见,执行结果也一模一样,而简单CASE表达式可以做的事,搜索CASE表达式一定可以做到。

2.CASE表达式的注意事项
(1)注意WHEN子句的逻辑,防止出现某些子句不可能被执行的现象。
(2)各个WHEN子句和ELSE子句返回的数据类型应该相同(NULL除外,因为NULL在SQL中只是一个标记,而不属于任何数据类型)。
(3)不能忘记写END!!!!!!
(4)尽可能去写有实际意义的ELSE语句,如果不写,那么其默认返回NULL,这在很多情况下可能会给我们带来问题。

3.CASE表达式将已有编号方法转换为新的方式并统计
在这里插入图片描述
将上面的这张表,转换为下面的格式
在这里插入图片描述
在这种情况下,通常(即我能想到)的做法是,定义一个县和地区的对照表,通过两个表之间建立连接来进行聚合汇总。但是通过CASE子句也可以实现这个目标,而且省去了表连接的操作,其代码如下:

select case pref_name when '德岛' then '四国'
					 when '香川' then '四国'
					 when '爱媛' then '四国'
					 when '高知' then '四国'
					 when '福冈' then '九州'
					 when '佐贺' then '九州'
					 when '长崎' then '九州'
			else '其他' end as district,
			sum(population) as population_sum
			from poptbl
			group by case pref_name 
					when '德岛' then '四国'
					 when '香川' then '四国'
					 when '爱媛' then '四国'
					 when '高知' then '四国'
					 when '福冈' then '九州'
					 when '佐贺' then '九州'
					 when '长崎' then '九州'
			else '其他' end;

乍一看这个语句,好像很难理解(至少我想了好一会),但是其实可以把整个CASE表达式看作一个“字段”,一个对应着各个县的地区字段,在这样一个字段的加入后,我们可以轻松地进行分组聚合。

4.用CASE语句进行不同条件的统计
在这里插入图片描述
把这张表统计为以下形式
在这里插入图片描述
在不用CASE语句的情况下,我的第一反应(当然书上也是这么写的)是将二者分开查询,即:

select pref_name,sum(population)
from PopTbl2
where sex = '01'
group by pref_name;

select pref_name,sum(population)
from PopTbl2
where sex = '02'
group by pref_name;

而通过CASE子句,则可以做到同时查询二者,即

select pref_name,
	sum(case sex when 1 then population else 0 end) as '男',
	sum(case sex when 2 then population else 0 end) as '女'
	from poptbl2
	group by pref_name;

书中有一句话说的有些扎心,新手用WHERE子句进行条件分支,高手用SELECT子句进行条件分支。

未完待续

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值