概述
GROUP BY我們可以先從字面上來了解,GROUP表示分組,BY後面寫字段名,就表示根據哪個字段進行分組,如果有用Excel比較多的話,GROUP BY比較類似Excel裡面的透視表。
GROUP BY必須得配合聚合函數來用,分組之後你可以計數(COUNT),求和(SUM),求平均數(AVG)等。
常用聚合函數
- count() 計數
- sum() 求和
- avg() 平均數
- max() 最大值
- min() 最小值
文法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
例子
接下來我們将通過例子進行了解:
我們現在有一張dept_emp表共四個字段,分别是emp_no(員工編号),dept_no(部門編号),from_date(起始時間),to_date(結束時間),記錄了員工在某一部門所處時間段,to_date等于9999-01-01的表示目前還在職。

image.png
部門人數
我們現在想知道每個部門有多少名在職員工,步驟如下:
- 篩選在職員工
;where to_date='9999-01-01'
- 對部門進行分組
group by dept_no
- 對員工進行計數
count(emp_no)
完整語句如下:
SELECT
dept_no as 部門,
count( emp_no) as 人數
FROM
dept_emp
WHERE
to_date = '9999-01-01'
GROUP BY
dept_no
結果
部門名稱
我們上一步分組之後得到的結果是部門編号,下一步我們可以通過departments去關聯出部門名稱,語句如下:
SELECT
( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部門,
count( de.emp_no ) AS 人數
FROM
dept_emp de
WHERE
de.to_date = '9999-01-01'
GROUP BY
de.dept_no
HAVING
當然提到GROUP BY 我們就不得不提到HAVING,HAVING相當于條件篩選,但它與WHERE篩選不同,HAVING是對于GROUP BY對象進行篩選。
我們舉個例子:
每個部門人數都有了,那如果我們想要進一步知道員勞工數大于30000的部門是哪些,這個時候就得用到HAVING了。
語句如下:
SELECT
( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部門,
count( de.emp_no ) AS 人數
FROM
dept_emp de
WHERE
de.to_date = '9999-01-01'
GROUP BY
de.dept_no
HAVING
count( de.emp_no ) > 30000
以上便是GROUP BY的一些基本使用方法介紹,如有其他問題,歡迎留言~
peace~