版权声明:尊重原创,转载请标明"本文转自:https://blog.csdn.net/high2011" https://blog.csdn.net/high2011/article/details/82686858
Where 和Having的区别?
1、相同点
where和having:都是限定返回的数据集、 在一个sql语句中可以有where子句和having子句。
2、不同点
where
(1)在where 子句中不能使用聚组函数
-- 错误的写法
SELECT rd.brand_id from table001 rd group by rd.brand_id where rd.brand_id >='20180901';
(2) where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
(3)WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
having
(1)在having语句中可以使用聚组函数
-- 正确
SELECT rd.brand_id from table001 rd group by rd.brand_id HAVING rd.brand_id >='20180901';
(2)查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方
(3)HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
(4) 当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。
3、where和having转换
SELECT col1 FROM t1 GROUP BY col1 HAVING SUM(col2) > 10
等价于
SELECT col1 FROM (SELECT col1, SUM(col2) AS col2sum FROM t1 GROUP BY col1) t2 WHERE t2.col2sum > 10