1.順序 sql
若是在select語句中同時包含group by、having、order by,那麼他們的順序是group by——having——order by。 函數
2.關於聚合函數(分組函數) spa
在select 語句中可使用group by 子句將行劃分紅較小的組,而後使用聚組函數返回每個組的彙總信息, select
另外,可使用having子句 限制返回的結果集。group by 子句能夠將查詢結果分組, 數據
並返回行的彙總信息Oracle 按照group by 子句中指定的表達式的值分組查詢結果。 查詢
在帶有group by 子句的查詢語句中,在select 列表中指定的列要麼是group by 子句中指定的列, vi
要麼包含聚組函數 co
select max(sal),job emp group by job;
(注意max(sal),job的job並不是必定要出現,但有意義)
查詢語句的select 和group by ,having 子句是聚組函數惟一出現的地方,
在where 子句中不能使用聚組函數。
3.group by 與 having
select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;
當在gropu by 子句中使用having 子句時,查詢結果中只返回知足having條件的組。
在一個sql語句中能夠有where子句和having子句。having 與where 子句相似,均用於設置限定條件
where 子句的做用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組以前過濾數據,條件中不能包含
聚組函數,使用where條件顯示特定的行。
having 子句的做用是篩選知足條件的組,即在分組以後過濾數據,條件中常常包含聚組函數,使用having 條件顯示特定
的組,也可使用多個分組標準進行分組。
查詢每一個部門的每種職位的僱員數
select deptno,job,count(*) from emp group by deptno,job
/****************************************************************
4.特別注意
在使用group by 時,有一個規則須要遵照,即出如今select列表中的字段,若是沒有在組函數中,那麼必須出如今group by 子句中。
(select中的字段不能夠單獨出現,必須出如今group語句中或者在組函數中。)