吐槽:CSDN的文章质量真的是不敢恭维了,全是抄来抄去的,文章千篇一律,找不到自己想要的答案
主要两点区别:
-
作用时间
where 结果返回之前进行约束
having 结果返回之后进行过滤
-
是否能够使用聚合函数
where 条件里不能使用聚合函数,因为where约束会比聚合函数先执行
having 条件里可以使用聚合函数,因为having过滤在聚合函数执行之后执行
总结两句话就是:Where 是一个
约束声明
,使用Where约束来自数据库的数据,Where是在结果返回之前起作用
的,Where中不能使用聚合函数
。
Having是一个过滤声明
,是在查询返回结果集以后对查询结果进行的过滤操作
,在Having中可以使用聚合函数
。
在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。
使用having的例子:
select a from table group by a having b > 1000
使用聚合函数作为过滤条件的例子:
having count(column_1)=2,
having avg(column_1)=3.5,
group by column_1 having column_1='男性'