where、group by的区别

where筛选是在分组之前筛选,筛选完之后再group by

having是分组之后再筛选,筛选完之前先group by

执行顺序:where>sum、count等聚合函数>having
所以where条件里不能有聚合函数,因为where条件在聚合函数之前执行。
若须引入聚合函数来对group by 结果进行过滤 则只能用having。(此处不多说,自己想 是先执行聚合函数还是先过滤 然后比对我上面列出的执行顺序 一看便知)
样例:selectsum(score)fromstudentwheresex='man'groupbynamehavingsum(score)>210

注意事项 : 
1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。 
2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 
3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

猜你喜欢

转载自blog.csdn.net/fxjwj1997518/article/details/82788114
今日推荐