mysql中聚合函数条件

来源:互联网 发布:预防数据库死锁的方法 编辑:程序博客网 时间:2024/04/27 15:32

有个需求,某张表,有个状态字段(1:成功,2:失败,类似这样的),现要用日期分组统计不同状态下的数量

先写了个子查询:


select aa.logDate,aa.totalLogs 
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=1) pendingLogs
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=2) successLogs
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=3) errorLogs
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=4) callbackErrorLogs
from
(
select
DATE_FORMAT( a.startTime, '%Y-%m-%d') logDate,
count(1) totalLogs
from dxp.dxp_handlermodel a 
group by DATE_FORMAT( a.startTime, '%Y-%m-%d') 
) aa 


执行相当慢,想到count中能不能加条件,找了一下,如下:

select
DATE_FORMAT( startTime, '%Y-%m-%d') logDate,
count(1) totalLogs,
count(if(executeStatus=1,true,null)) pendingLogs,
count(if(executeStatus=2,true,null)) successLogs,
count(if(executeStatus=3,true,null)) errorLogs,
count(if(executeStatus=4,true,null)) callbackErrorLogs
from dxp.dxp_handlermodel
group by DATE_FORMAT( startTime, '%Y-%m-%d') 


简明易懂,且执行效率非常高

其它的聚合函数也可以用,如SUM等

居然之前不知道,真不知道当年的报表项目是咋做的,记录一下



0 0