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