8、Oracle:group by用法
首先group by 的簡單說明:
?? group by 一般和聚合函數一起使用才有意義,比如 count sum avg等,使用group by的兩個要素:
?? (1) 出現在select后面的字段 要么是是聚合函數中的,要么就是group by 中的.
?? (2) 要篩選結果 可以先使用where 再用group by 或者先用group by 再用having
下面看下 group by多個條件的分析:
在SQL查詢器輸入以下語句
create table test
(
a varchar(20),
b varchar(20),
c varchar(20)
)
insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','乙')
insert into test values(1,'b','乙')
insert into test values(1,'b','乙')
insert into test values(1,'b','乙')
第一次查詢
select * from test; 結果如下圖:
?
結果中 按照b列來分:則是 5個a 3個b.
按照c列來分:則是 4個甲 4個乙.
第二次 按照 b列來分組 代碼如下
select?? count(a),b from test group by b
第三次 按照 c列來分組 代碼如下
select count(a),c from test group by c
第四次 按照 b c兩個條件來分組
select count(a),b,c from test group by b,c
第五次 按照 c b 順序分組
select count(a),b,c from test group by c,b
第二部分:
Oracle之Group by和Having
來自:http://www.cnblogs.com/playerlife/archive/2012/10/18/2729468.html
在介紹GROUP BY 和 HAVING 子句前,我們必需先講講sql語言中一種特殊的函數:聚合函數,例如SUM, COUNT, MAX, AVG等。這些函數和其它函數的根本區別就是它們一般作用在多條記錄上。
SELECT SUM(population) FROM bbc
這里的SUM作用在所有返回記錄的population字段上,結果就是該查詢只返回一個結果,即所有國家的總人口數。
通過使用GROUP BY 子句,可以讓SUM 和 COUNT 這些函數對屬于一組的數據起作用。當你指定 GROUP BY region 時, 屬于同一個region(地區)的一組數據將只能返回一行值,也就是說,表中所有除region(地區)外的字段,只能通過 SUM, COUNT等聚合函數運算后返回一個值。
HAVING子句可以讓我們篩選成組后的各組數據,WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后對組記錄進行篩選。
讓我們還是通過具體的實例來理解GROUP BY 和 HAVING 子句,還采用第三節介紹的bbc表。
SQL實例:
一、顯示每個地區的總人口數和總面積:
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
先以region把返回記錄分成多個組,這就是GROUP BY的字面含義。分完組后,然后用聚合函數對每組中的不同字段(一或多條記錄)作運算。
二、 顯示每個地區的總人口數和總面積.僅顯示那些面積超過1000000的地區。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000
在這里,我們不能用where來篩選超過1000000的地區,因為表中不存在這樣一條記錄。
相反,HAVING子句可以讓我們篩選成組后的各組數據.
第三部分:來自:http://www.cnblogs.com/wanggd/p/3512214.html
Oracle中group by用法
Oracle中group?by用法在select?語句中可以使用group?by?子句將行劃分成較小的組,一旦使用分組后select操作的對象變為各個分組后的數據,使用聚組函數返回的是每一個組的匯總信息。
使用having子句?限制返回的結果集。group?by?子句可以將查詢結果分組,并返回行的匯總信息Oracle?按照group?by?子句中指定的表達式的值分組查詢結果。?
在帶有group?by?子句的查詢語句中,在select?列表中指定的列要么是group?by?子句中指定的列,要么包含聚組函數? select?max(sal),job?emp?group?by?job;? (注意max(sal),job的job并非一定要出現,但有意義)? 查詢語句的select?和group?by?,having?子句是聚組函數唯一出現的地方,在where?子句中不能使用聚組函數。? 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?條件顯示特定的組,也可以使用多個分組標準進行分組。?
使用order?by排序時order?by子句置于group?by?之后?并且?order?by?子句的排序標準不能出現在select查詢之外的列。
查詢每個部門的每種職位的雇員數?select?deptno,job,count(*)?from?emp?group?by?deptno,job
/****************************************************************
記住這就行了:
在使用group?by?時,有一個規則需要遵守,即出現在select列表中的字段,如果沒有在組函數中,那么必須出現在group?by?子句中。(select中的字段不可以單獨出現,必須出現在group語句中或者在組函數中。)
總結
以上是生活随笔為你收集整理的8、Oracle:group by用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: steam泰坦之旅dlc_泰坦之旅亚特兰
- 下一篇: CCF A类会议或期刊----多视图,多