Mysql中where和having用法及区别
1、Mysql中Having和Where用法当SQL语句中使用聚合函数,然后又需要对聚合函数的记录集进行筛选过滤时,这个时候就需要用到Having子句。如果是在聚合函数前过滤记录用Where,在聚合函数后对组记录数据进行筛选就需要用Group by和Having组合。其实也可以换个角度理解也就是where是对真实表的数据进行过滤,而having是依赖于聚合函数生成的二维表数据进行过滤。总结:whe
1、Mysql中Having和Where用法
当SQL语句中使用聚合函数,然后又需要对聚合函数的记录集进行筛选过滤时,这个时候就需要用到Having子句。如果是在聚合函数前过滤记录用Where,在聚合函数后对组记录数据进行筛选就需要用Group by和Having组合。其实也可以换个角度理解也就是where是对真实表的数据进行过滤,而having是依赖于聚合函数生成的二维表数据进行过滤。
总结:where作用于表数据过滤,Having作用于组数据的过滤;where在分组和聚合之前选取数据,having在分组和聚合之后选取分组数据。
2、where、聚合函数、having在from后面的执行顺序:
where > 聚合函数 > having
若需要对聚合函数对group by的结果进行过滤,只能使用having。Having语句通常与Group by语句联合使用,用来过滤Group by语句返回的结果集,Having语句的存在弥补了Where关键字不能与聚合函数联合使用的不足。
例如:查询平均成绩大于60分的同学的学号和平均成绩
select s_id, AVG(s_score) s_avg from Score group by s_id Having AVG(s_score) > 60;
也可以写成如下形式:
select s_id, AVG(s_score) s_avg from Score group by s_id Having s_avg > 60;
如果将Having改成where 就会报错,因为where的执行顺序大于聚合函数。
3、使用where和from注意事项
(1)where后不能跟聚合函数,因为where执行顺序大于聚合函数。
(2)where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即“在分组之前进行过滤数据”,条件中不能包含聚合函数,使用where条件显示特定的行。
(3)having子句的作用是筛选满足条件的组,即“在分组之后过滤数据”,条件中经常包含聚合函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
更多推荐
所有评论(0)