不少狀況下,咱們須要進行一些彙總操做,好比統計整個公司的人數或者統計每一個部門的人數,這個時就要用到SQL的分組查詢,又稱爲聚合查詢。函數
聚合操做的語法以下:code
SELECT [field1,field2,……fieldn] fun_nameget FROM tablenameit [WHERE where_contition]io [GROUP BY field1,field2,……fieldntable [WITH ROLLUP]]效率 [HAVING where_contition]基礎 |
對其參數進行如下說明。語法
¡ fun_name表示要作的聚合操做,也就是聚合函數,經常使用的有sum(求和)、count(*)(記錄數)、max(最大值)、min(最小值)。im
¡ GROUP BY關鍵字表示要進行分類聚合的字段,好比要按照部門分類統計員工數量,部門就應該寫在group by後面。
¡ WITH ROLLUP是可選語法,代表是否對分類聚合後的結果進行再彙總。
¡ HAVING關鍵字表示對分類後的結果再進行條件的過濾。
注意:having和where的區別在於having是對聚合後的結果進行條件的過濾,而where是在聚合前就對記錄進行過濾,若是邏輯容許,咱們儘量用where先過濾記錄,這樣由於結果集減少,將對聚合的效率大大提升,最後再根據邏輯看是否用having進行再過濾。
示例:要emp表中統計總人數:
SQL> SELECT COUNT(1) FROM emp; COUNT(1) ---------- 14 |
示例:在此基礎上,要統計各個部門的人數。
SQL> SELECT deptno,count(1) FROM emp GROUP BY deptno; DEPTNO COUNT(1) ------ ---------- 30 6 20 5 10 3 |
示例:統計人數大於3人的部門。
SQL> SELECT deptno,count(1) FROM emp GROUP BY deptno HAVING COUNT(1)>3; DEPTNO COUNT(1) ------ ---------- 30 6 20 5 |
示例:統計emp表全部員工的工資總額、最高和最低工資。
SQL> SELECT SUM(sal),MAX(sal),MIN(sal) FROM emp; SUM(SAL) MAX(SAL) MIN(SAL) ---------- ---------- ---------- 29025 5000 800 |
示例:統計emp表所部門編號爲10和各職位人數。
SQL> SELECT job,count(1) 2 FROM emp 3 WHERE deptno=10 4 GROUP BY job 5 ORDER BY job; JOB COUNT(1) --------- ---------- CLERK 1 MANAGER 1 PRESIDENT 1 |