SQL中GROUP BY用法示例

SQL中GROUP BY用法示例

概述

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_nameWHERE column_name operator valueGROUP BY column_name;

例子

接下來我們將透過例子進行理解:

我們現在有一張dept_emp表共四個欄位,分別是emp_no(員工編號),dept_no(部門編號),from_date(起始時間),to_date(結束時間),記錄了員工在某一部門所處時間段,to_date等於9999-01-01的表示目前還在職。

SQL中GROUP BY用法示例

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

結果

SQL中GROUP BY用法示例

image。png

部門名稱

我們上一步分組之後得到的結果是部門編號,下一步我們可以透過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

結果

SQL中GROUP BY用法示例

image。png

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

結果

SQL中GROUP BY用法示例

image。png

以上便是GROUP BY的一些基本使用方法介紹,如有其他問題,歡迎留言~

作者:Awesome_Tang

連結:https://www。jianshu。com/p/8b135d373df1

簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。