having子句与where都是设定条件筛选的语句,有相似之处也有区别。

having与where的区别:

having是在分组后对数据进行过滤

where是在分组前对数据进行过滤

having后面可以使用聚合函数

where后面不可以使用聚合

在查询过程中执行顺序:from>where>group(含聚合)>having>order>select。

聚合语句(sum,min,max,avg,count)要比having子句优先执行,所有having后面可以使用聚合函数。而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count),所有where条件中不能使用聚合函数。

select sum(num) as rmb from order where id>10;

//先查询出id大于10的数据,再执行聚合语句sum(num)

//执行以下语句会报错,因为where子句先于sum(num)执行,执行where子句的时候还没有sum(num),所以会报错。

select sum(num) as rmb from order where sum(num)>10;

对分组数据再次判断时要用having

select reports,count(*) from employees group by reports having count(*) > 4;

//首先查询了select reports,count() from employees group by reports,在此基础上查找count() > 4的数据。

聚合函数:

例如SUM, COUNT, MAX, AVG等,这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

HAVING子句可以让我们直接筛选成组后的各组数据,也可以在聚合后对组记录进行筛选,而WHERE子句在聚合前先筛选记录,也就是说作用在GROUP BY 子句和HAVING子句前。

————————————————

版权声明:本文为CSDN博主「ryan007liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/ryan007liu/article/details/91441479

最新文章

  1. Chrome开发者工具不完全指南(四、性能进阶篇)
  2. jquery实现简单瀑布流布局(续):图片懒加载
  3. 初学JAVA的 感想 尹鑫磊
  4. [LintCode] Nuts & Bolts Problem 螺栓螺母问题
  5. 几个gcc的扩展功能
  6. PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法
  7. html之块级标签h系列,div
  8. modbus rtu 协议转DLT645-2007和DLT645-1997电表协议转换器定制,
  9. 把WinXP装进内存 性能飚升秒杀固态硬盘
  10. 原生sql整理
  11. 简单实现计算机上多个jdk环境切换
  12. python unittest装载、执行、造成报告
  13. hiho #1196 : 高斯消元·二
  14. 通过sql的DMV查看数据库使用状态
  15. 机器学习理论基础学习19---受限玻尔兹曼机(Restricted Boltzmann Machine)
  16. vscode 习惯配置
  17. Docker 创建虚拟机并且远程链接
  18. ES6——Symbol数据类型
  19. 10个足以让你成为更优秀的程序员的C语言资源
  20. [iOS]swift版内购

热门文章

  1. docker开源系统监控软件Nagios
  2. udphdr结构
  3. 【转】分布式之redis复习精讲
  4. 关于int和Integer缓存(二):修改缓存大小
  5. Go版本管理--依赖包存储
  6. 将VSCode添加至右键菜单(Windows下)
  7. MyBatis学习总结(四)——字段名与实体类属性名不相同的冲突的解决
  8. GDAL的基本操作
  9. 20210809 Merchant,Equation,Rectangle
  10. noip模拟40