定义
- Having子句的作用是过滤结果集,和WHERE的作用类似
- WHERE是对每一行进行过滤的,查询出符合where条件的每一行
- Having是对查询出结果集分组后的结果进行过滤
- Having子句和GROUP BY一起使用,紧跟在group by的后边
代码案例
-- 使用WHERE进行先分组后过滤
SELECT * FROM PLEATUSER WHERE AGE > 30;
SELECT AGE FROM PLEATUSER WHERE AGE > 30 GROUP BY AGE;
-- 错误写法
SQL> SELECT AGE FROM PLEATUSER GROUP BY AGE WHERE AGE > 30 ;
SELECT AGE FROM PLEATUSER GROUP BY AGE WHERE AGE > 30
*
第 1 行出现错误:
ORA-00933: SQL 命令未正确结束
--错误写法:HAVING的过滤条件必须出现在前边的查询结果集中
SQL> SELECT NAME FROM PLEATUSER GROUP BY AGE HAVING AGE > 30 ;
SELECT NAME FROM PLEATUSER GROUP BY AGE HAVING AGE > 30
*
第 1 行出现错误:
ORA-00979: 不是 GROUP BY 表达式
-- 正确写法,先进行分组,后进行过滤
SQL> SELECT AGE FROM PLEATUSER GROUP BY AGE HAVING AGE > 30 ;
AGE
----------
34
32
41
45
-- HAVING子句中使用函数进行分组(查询所在城市人数大于2的城市)
SQL> SELECT CITY FROM PLEATUSER GROUP BY CITY HAVING AVG(AGE)>20 ;
CITY
--------------------------------------------------------------------------------
上海
北京
浙江
边学习边记录,若有不足之处欢迎留言指点…