SQL case when 的用法

case when用于按条件筛选:

select case 
		when logo='123' then cardName
		else 'xyk'
	end as card_name
from table
	where dt='20220202'

case when用于统计
count用于,当值赋予NULL时,count不会累计,其他值会累计,例如有一个SQL:select count(1) from t where name='A’的结果为5,表总数为10。使用case when count效果如下:

select count(case 
		when name='A' then 1
		else NULL
	end) as numA
from t

以上结果为5.

select count(case 
		when name='A' then 1
		else 0
	end) as numA
from t

以上结果为10.

sum的效果:

select sum(case 
		when name='A' then 1
		else 0
	end) as numA
from t

以上结果为5

添加group by 的场景:

select name,count(case 
		when name='A' then 1
		else 0
	end) as num
from t
group by name

以上sql的name='A’不起作用,等价select name,count(1) from t group by name。

select name,count(case 
		when name='A' then 1
		else NULL
	end) as num
from t
group by name

以上SQL除了name='A’的为5,其它的num都为0.

case when结合count distinct使用,假设有如下表:

prod_idact_typediv_id
p1clickdivice1
p1viewdivice2
p1viewdivice1
p1clickdivice1
p1clickdivice2
p1clickdivice3
select prod_id,count(distinct case 
		when act_type='click' then div_id 
	end) as clickUV, 
	count(distinct case 
		when act_type='view' then div_id 
	end) as viewUV
	from t group by prod_id

结果:

prod_idclickUVviewUV
p132

备注:count(NULL)=0,sum(NULL)=NULL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值