MySql中聚合函数增加条件表达式的方法

  

Mysql与聚合函数在一起时候,条件和有条件的过滤时机

  

<强>,在聚合之前过滤

  

当一个查询包含了聚合函数及那里的条件,像这样的情况
  选择马克斯(cid)从t t.id<999年
  这时候会先进行过滤,然后再聚合。先过滤出ID《999的记录,再查找最大的cid返回。

  

<强>有在聚合之后过滤

  

有在分组的时候会使用,对分组结果进行过滤,通常里面包含聚合函数。

        从应用程序选择ip,马克斯(id)   由ip组   马克斯(id)祝辞=5      

先分组,再聚合,然后过滤聚合结果大于等于5的结果集

  

  

,是先执行,然后再执行聚合函数具有是在聚合函数执行完之后再执行。

  

<强>下面是补充

  

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

  

先写了个子查询

        选择aa.logDate aa.totalLogs   (从dxp选择计数(1)。dxp_handlermodel aa。logDate=DATE_FORMAT(开始时间”,Y % - % - % d ')和executeStatus pendingLogs=1)   (从dxp选择计数(1)。dxp_handlermodel aa。logDate=DATE_FORMAT(开始时间”,Y % - % - % d ')和executeStatus=2) successLogs   (从dxp选择计数(1)。dxp_handlermodel aa。logDate=DATE_FORMAT(开始时间”,Y % - % - % d ')和executeStatus errorLogs=3)   (从dxp选择计数(1)。dxp_handlermodel aa。logDate=DATE_FORMAT(开始时间”,Y % - % - % d ')和executeStatus=4) callbackErrorLogs   从   (   选择   DATE_FORMAT (a。开始时间”,Y % - % - % d ') logDate,   (1)totalLogs计数   从dxp。dxp_handlermodel一   集团由DATE_FORMAT (a。开始时间”,Y % - % - % d ')   )aa      

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

        选择   DATE_FORMAT(开始时间,‘Y % - % - % d’) logDate,   (1)totalLogs计数,   数(如果(executeStatus=1,真的,null) pendingLogs,   数(如果(executeStatus=2,真的,null) successLogs,   数(如果(executeStatus=3,真的,null) errorLogs,   数(如果(executeStatus=4,真的,null)) callbackErrorLogs   从dxp.dxp_handlermodel   group by DATE_FORMAT(开始时间,‘Y % - % - % d’)      

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

  

 MySql中聚合函数增加条件表达式的方法

  

其它的聚合函数也可以用,如求和等其他聚合函数

  

实战示例:

        (如果选择计数(create_date & lt;“2017-01-01”和host_profile_id=9294 d2bf-f457-4fe5-9a36-e5f832310dc2,真的,从profile_visit_log null)   ——等同于   (如果选择计数(create_date & lt;“2017-01-01”,的确,null))从profile_visit_log数host_profile_id=?294 d2bf-f457-4fe5-9a36-e5f832310dc2”      

好了这篇文章就介绍到这,希望大家以后多多支持。

MySql中聚合函数增加条件表达式的方法