【mysql 】 case when 统计报表利器

/ 背景

经常忘记怎么使用,语法很简单,但是需要注意的细节很多

首先它是在查询(select)中使用,返回值可以用having 处理(整个类似于切面,查询完成后,对结果的处理)

首先 case … end 是成对出现的,

然后就是when … then…成对出现,类似if (也可以使用else,else 不用 then)

select 
case vip 
when 1 then 'vip1'
when 2 then 'vip2'
when 3 then 'vip3'
else 'otherVip' 
end  

 from tstd_user  limit 100

一般先写原始字段,先执行看下有没有SQL错误(经常怕写错,有时候是其他地方的SQL错误,when 和then是真的很像。但是含义很明显,当xxx的时候,然后…)

如果记不住枚举,或者枚举数量太多,还是连表查比较方便(当前性能会差一些,报表对性能要求没那么高)

使用方式

结合实际的业务才发现有些功能是非常的好用,而case when非常适合做统计报表。

最常见的统计报表比如成绩统计

select
       (case
    when point>0 and point <60 then '不及格'
    when point>=60 and point <=80 then '良好'
    when point>80 and point <=100 then '优秀'
    else '不及格' end ) as pointv,count(1) count
from member_np  group by pointv 

SQL语句解析:
其实这是固定的写法,就是模仿着写一次就好了。

when后面的是条件,可以筛选出不同

then后面就是筛选出的值最后显示的值,可以显示数值也可以显示为字符串,但是注意点是数据格式必须统一,如果用字符串就都使用字符串,而不能结果有差异,这样就会执行报错

else里面就是都没有匹配到的显示结果,同样也要和then里面的类型保持一致,因为它也可能是最后展示的值

else里面的值我判断为不及格和0-60分的一致的原因是因为分数字段是可空的,这样就把空值的判定为不及格,当然我们也可以明确的去判断空值,具体的写法如下,同样和正常的SQL条件语句编写一致,不能直接写=null,而是要使用 is null 或者is not null。

select
       (case
    when point is null  then '不及格'
    when point>0 and point <60 then '不及格'
    when point>=60 and point <=80 then '良好'
    when point>80 and point <=100 then '优秀'
    else '不及格' end ) as pointv,count(1) count
from member_np  group by pointv 

case when最厉害的功能在于可以直接一次统计区间的数量,我们使用group连接起来,然后我们就可以直接使用count来统计数量,不需要在去执行多条SQL语句去统计结果了,效率大大提升。

上面的SQL的执行结果就类似于,这样,左边就是then的值,右边就是对应区间里面的人数。
在这里插入图片描述
是不是很刺激,如果加上having配合group就更刺激了。

(日常偷图,侵删)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值