Oracle学习笔记010-2(Having子句)

定义
  • 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
--------------------------------------------------------------------------------
上海
北京
浙江


边学习边记录,若有不足之处欢迎留言指点…

发布了63 篇原创文章 · 获赞 1 · 访问量 2012

猜你喜欢

转载自blog.csdn.net/qq_45061361/article/details/105045487
今日推荐