SQL查詢系列之七:SQL分組查詢

不少狀況下,咱們須要進行一些彙總操做,好比統計整個公司的人數或者統計每一個部門的人數,這個時就要用到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

相關文章
相關標籤/搜索