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

where 在聚合之前过滤

当一个查询包含了聚合函数及where条件,像这样的情况

select max(cid) from t where t.id<999

这时候会先进行过滤,然后再聚合。先过滤出ID《999的记录,再查找最大的cid返回。

having 在聚合之后过滤

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

SELECT ip,MAX(id) FROM app

GROUP BY ip

HAVING MAX(id)>=5

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

二者的区别:

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

下面是补充

有个需求,某张表,有个状态字段(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等其他聚合函数

实战示例:

select count(if(create_date < '2017-01-01' and host_profile_id = '9294d2bf-f457-4fe5-9a36-e5f832310dc2',true,null)) from profile_visit_log

-- 等同于

select count(if(create_date < '2017-01-01',true,null)) count from profile_visit_log where host_profile_id = '9294d2bf-f457-4fe5-9a36-e5f832310dc2'

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

mysql 聚合函数 怎么用在条件里_MySql 中聚合函数增加条件表达式的方法相关推荐

  1. mysql中explain的使用,mysql使用方法_mysql中explain函数的使用方法

    摘要 腾兴网为您分享:mysql中explain函数的使用方法,英语字典,小熊到家,腾讯新闻,刷机大师等软件知识,以及adobeflashplayerformac,灯光工厂,全民小视频,网盘解析,37 ...

  2. mysql时间函数now()_MySQL中时间函数NOW()和SYSDATE()的区别

    mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...

  3. mysql算法函数_mysql中的函数总结

    mysql中常用日期时间函数 MySQL服务器中的三种时区设置: ①系统时区---保存在系统变量system_time_zone ②服务器时区---保存在全局系统变量global.time_zone ...

  4. mysql的concat函数_MySQL中concat函数(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制 ...

  5. mysql ( )连接_MySQL中concat函数(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制 ...

  6. mysql concat键值对_mysql中concat函数实现数据库字段合并查询

    concat()函数是mysql中用来字符类型的字段联合查询的一个不错的函数,但尽量不要使用哦, mysql中怎么合并两个字段为一个字段呢?试了好多方法,结果还是不是我想要的 例如:select (a ...

  7. mysql中group_concat函数_MySQL中group_concat函数

    为什么我要学习该函数,我在做控制页面的权限的时候,没有使用Shiro框架[强烈推荐使用], 为了降低学习成本,暂时给学生过渡的想法,我需要控制到按钮级别的权限,我的想法是通过Jquery对我的页面中的 ...

  8. mysql round不四舍五入_MySQL中ROUND函数进行四舍五入操作陷阱分析

    本文实例讲述了MySQL中ROUND函数进行四舍五入操作陷阱.,具体如下: 在MySQL中, ROUND函数用于对查询结果进行四舍五入,不过最近使用ROUND函数四舍五入时意外发现并没有预期的那样,本 ...

  9. if函数多个条件php,EXCEL中IF函数多条件判断怎么写

    在表格函数的运用中,"IF"函数我们经常用到,往往我们用"IF"判读多个条件时,运用的是多级嵌套的方式.然而,我们需要多个条件,只需满足其中一个条件时就返回真值 ...

最新文章

  1. 解决npm ERR! Unexpected end of JSON input while parsing near...的方法
  2. FLEX PHP 交互 简单登录界面(1)源代码
  3. 桌面应用程序员简单尝试Rich JavaScript Application
  4. Android 实现微信QQ分享以及第三方登录
  5. 给网站配置免费的HTTS证书 1
  6. 系统服务器异常0,贪婪洞窟云服务器异常0
  7. 《软件工艺师:专业、务实、自豪》一第3章
  8. 字节流和字符流哪个不刷新_不喜欢节流吗?
  9. vb mysql 表格显示,在VB中编辑数据库和电子表格
  10. w3c 菜鸟mysql_W3C 教程 | 菜鸟教程
  11. oracle恢复删除数据
  12. 计算机打音乐歌谱成都,赵雷成都的曲谱
  13. SAT数学解题方法总结
  14. 计算机 网络 硬件包括,局域网网络硬件主要包括5个
  15. 采用seam2的工具创建seam工程
  16. JavaSE基础(134) 打印流
  17. Android获取QQ音乐url,QQ音乐vkey获取,更新播放url
  18. CVPR 2022 论文列表(持续更新)
  19. 解决无字幕问题--射手影音VS迅雷影音
  20. 2022-2028全球与中国微生物强化采油市场现状及未来发展趋势

热门文章

  1. 1105: 判断友好数对(函数专题)
  2. 如何将Android Studio卸载的干干净净?
  3. java成员内部类_Java中的内部类(二)成员内部类
  4. 惠普800g1支持什么内存_惠普黑白激光打印机哪种好 惠普黑白激光打印机推荐【图文详解】...
  5. echart vue 图表大小_cesium+vue,性能优化
  6. kernal tch 下载 天正_tch kernal.arx
  7. python字符串变量s的值是python网络爬虫_【Python爬虫作业】-字符串
  8. python列表生成器语法_python列表生产式和生成器
  9. sklearn中lstm_分别用sklearn和tensorflow做房价预测
  10. Spark-大规模数据处理计算引擎