天天看点

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句

在工作中,有时会碰到下面这种情况:

领导让你分析个问题,但是数据库中不能直接取到想要的字段,咋办嘞?

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句

莫慌,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代表购买次数。

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句

但对于业务人员来说,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

输出结果如下:

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句
※ 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

输出结果如下:

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句

Microsoft SQL Server

转化

如何把这个表A1转化成为下面的表A2呢?

表A1

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句

表A2

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句

这类情形也可以通过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函数共同使用。

觉得有所收获的童鞋,可以扫描下方的二维码关注我的微信公众号~

微信公众号:数据大作手

casewhen多条件查询_SQL查询语句进阶篇-让你大吃一惊的Case When语句