PLSQL 基礎教程 四 分組查詢
本節教程繼續介紹SQL中的分組查詢相關的知識及一些簡單的使用說明。
概念
分組查詢也是SQL中比較常用的一種,是對SELECT查詢的一個細化、彙總,用於根據某些條件,並結合聚合函式 COUNT(*) ,將一個查詢結果進行分組統計,獲得對應的條件的統計資料資訊
如果需要進行分組查詢,則需要使用GROUP BY 語句和 COUNT聚合函式 來對SELECT的結果資訊進行分組資訊統計。
分組查詢的語法格式如下:
SELECT < ITEM_LIST >,COUNT(*) FROM TABLE_NAME WHERE < WHERE_CLAUSE > GROUPBY < ITEM_LIST >;
ITEM_LIST:用於分組的條件,可以是一個或者多個語法格式說明:
COUNT(*):用於根據分組條件統計對應的分組的資料資訊,還可以用COUNT(1)代替,返回分組後的行統計資訊
WHERE_CLAUSE:獲取資料的過濾條件
說明:
a. 此處需要注意,GROUP BY 中的ITEM_LIST需要和SELECT中的ITEM_LIST個數、順序必須一致
b. 聚合函式COUNT(*)不能出現在WHERE 和 GROUP BY 語句中
概念
HAVING 是對GROUP BY分組查詢後的結果集進行資料過濾的,與WHERE語句的效果類似,主要是對結果集的資料進行篩選過濾的。
HAVING 與WHERE的區別
類別 區別 |
相同點 |
不同點 |
WHERE |
都是進行資料過濾的,對於結果集的資料進行篩選 |
1.既能用在普通的SELECT語句中,也能用在分組查詢的語句中 2.WHERE 中不能使用聚合函式COUNT 3.WHERE是對SELECT語句的資料進行篩選的 |
HAVING |
1.不能用在普通的SELECT語句中,只能用在GROUP BY 分組查詢語句中 2.HAVING中可以使用聚合函式COUNT 3.HAVING只能對分組中的資料進行過濾篩選 |
此處以ORACLE資料中中SCOTT使用者下的EMP表為例進行舉例說明:
SQL指令碼:用於統計不同部門中的不同職位的人員數量
SELECT DEPTNO部門編號, JOB 職位, COUNT(*) 數量
FROM SCOTT.EMP N
GROUPBY DEPTNO, JOB;
SQL指令碼:用於統計不同部門中某個職位人員數量大於1的部門和職位資訊
SELECT N.DEPTNO部門編號, N.JOB 職位, COUNT(*) 數量
FROM SCOTT.EMP N
GROUPBY N.DEPTNO, N.JOB
HAVINGCOUNT(*) >1;
4. 附錄
附錄
a. 本系列教程為個人原創,基於實際工作中的使用情況及個人理解,僅供學習交流之用,有不足之處還望批評指正,希望共同提高