關鍵字group by 、 Having的 用法


概述

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
部門人數

我們現在想知道每個部門有多少名在職員工,步驟如下:

  1. 篩選在職員工 where to_date='9999-01-01';
  2. 對部門進行分組group by dept_no
  3. 對員工進行計數 count(emp_no)
完整語句如下:
SELECT dept_no as 部門, count( emp_no) as 人數 FROM dept_emp WHERE to_date = '9999-01-01' GROUP BY dept_no 
結果
 
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 
結果
 
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 
結果
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM