GROUP BY咱們能夠先從字面上來理解,GROUP表示分組,BY後面寫字段名,就表示根據哪一個字段進行分組,若是有用Excel比較多的話,GROUP BY比較相似Excel裏面的透視表。
GROUP BY必須得配合聚合函數來用,分組以後你能夠計數(COUNT),求和(SUM),求平均數(AVG)等。java
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.pngspa
部門人數code
咱們如今想知道每一個部門有多少名在職員工,步驟以下:對象
where to_date='9999-01-01'
;group by dept_no
count(emp_no)
完整語句以下:io
SELECT dept_no as 部門, count( emp_no) as 人數 FROM dept_emp WHERE to_date = '9999-01-01' GROUP BY dept_no
結果table
image.pngfunction
部門名稱date
咱們上一步分組以後獲得的結果是部門編號,下一步咱們能夠經過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
歡迎加入java招聘交流羣,添加羣主邀請進羣: