在工作中,有时会碰到下面这种情况:
领导让你分析个问题,但是数据库中不能直接取到想要的字段,咋办嘞?
莫慌,SQL的Case when语句帮你解决这个痛点~~~
※ Case when语句是多条件判断的语句,用法是根据不同条件来返回相应的值。结构如下:
Case when 条件1 then 结果1
when 条件2 then 结果2
....
else 结果n end
在工作中,Case when 语句可以运用在衍生字段、行列转化、统计监控数据等方面。 ※ Case when用法1:衍生新字段目前在数据库中有这么一张order表,里面的字段sex代表性别,1为男,2为女;buy_number代表购买次数。
但对于业务人员来说,sex=1,2不知道是什么意思,为了方便业务理解,需要将相应的字段用Case when 语句处理下。
代码如下:
select order_id,name,created_time,
(case when sex=1 then '男'
when sex=2 then '女'
else '其他' end) 性别 ,
(case when buy_number=1 then '首次购买'
when buy_number>1 then '多次购买'
else '其他' end) 购买类型
from order
输出结果如下:
※ Case When用法2:监控统计针对案例1的情形,在业务分析时,经常需要做监控报表统计数据,这时聚合函数配合case when语句就事半功倍啦~
例如,我们需要按日统计
男性客户首次购买人数、女性客户首次购买人数、男性客户多次购买人数,女性客户多次购买人数这四个指标,就可以借鉴如下代码:
select created_time 购买时间,
sum(case when sex=1 and buy_number=1 then 1 end) 男性首次购买人数,
sum(case when sex=2 and buy_number=1 then 1 end) 女性首次购买人数,
sum(case when sex=1 and buy_number>1 then 1 end) 男性多次购买人数,
sum(case when sex=2 and buy_number>1 then 1 end) 女性多次购买人数
from order
group by created_time
输出结果如下:
Microsoft SQL Server
转化如何把这个表A1转化成为下面的表A2呢?
表A1
表A2
这类情形也可以通过Case when 语句实现,代码如下:
select 姓名,
Max(case when 课程='语文' then 成绩 else 0 end) 语文,
Max(case when 课程='数学' then 成绩 else 0 end) 数学,
Max(case when 课程='科学' then 成绩 else 0 end) 科学
from 表A1
group by 姓名
【小贴士】行列转化时通常需要与Max函数或Min函数共同使用。觉得有所收获的童鞋,可以扫描下方的二维码关注我的微信公众号~
微信公众号:数据大作手