sql优化

关于分组统计

员工统计

select
sum(case when salary>9999 and age>35 then 1 else 0 end) AS ‘第一组’ ,
sum(case when salary>9999 and age<35 then 1 else 0 end) AS ‘第二组’ ,
sum(case when salary<9999 and age>35 then 1 else 0 end) AS ‘第三组’ 
from db_job.tb_emp ;

这里用到了sum,case-when-then-else-end;我个人的看法如果要统计四组数据,那么这个sql对全量数据做了四次查询;下面是优化后的:

select SUM(t.type='A') AS ‘第一组’ ,SUM(t.type='B') AS ‘第二组’,SUM(t.type='C') AS ‘第三组’
FROM ( SELECT case when salary>9999 and age>35 then 'A' 
				else( case when salary>9999 and age<35 then 'B'
				else( case when salary<9999 and age>35 then 'C'  else 'other'  
				END)  
				END) 
				END as 'type' from b_job.tb_emp
      ) t;
我的想法是对这个数据库做一次遍历,就能统计出每个数据应该被分到哪一组.这样随着分组的增加,这个sql的时间是不会增加的;(但是这样做的前提是分的组不能有重叠的部分)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值