SQL - 分組語句 (GROUP BY Clause)

您好,未來的 SQL 巔峰大師!今天,我們將深入我們 SQL 工具箱中最強大的工具之一:GROUP BY 語句。作為你們親切友善的電腦老師,我將指導你們踏上這個旅程,一步一步地。所以,拿起你們最喜歡的飲料,舒適地坐好,讓我們一起踏上這個刺激的 SQL 冒險!

SQL - Group By Clause

SQL GROUP BY 語句

想像你正在組織一個巨大的圖書館。你有很多書散落在各處,你想將它們按照類型來排列。這就是 SQL 中 GROUP BY 語句的作用——它幫助我們將數據組織成整齊、邏輯的群組。

GROUP BY 語句用於將具有指定列中相同值的行分組。它通常與聚合函數一起使用,對每組行進行計算。

讓我們從一個簡單的例子開始:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;

在這個查詢中,我們按照員工的部門進行分組,並計算每個部門有多少員工。這就像問:"我們在每個類型中有多少本書?"

GROUP BY 語句與聚合函數

現在,讓我們來點刺激的。GROUP BY 與聚合函數一起使用時才能真正發光。這些函數對一組值進行計算,並返回單個結果。一些常見的聚合函數包括 COUNT()、SUM()、AVG()、MAX() 和 MIN()。

這裡是一張這些函數及其用法的表格:

函數 描述
COUNT() 計算行數
SUM() 計算一組值的總和
AVG() 計算一組值的平均值
MAX() 返回一組中的最大值
MIN() 返回一組中的最小值

讓我們看看這些函數在實際中的應用:

SELECT department,
COUNT(*) as employee_count,
AVG(salary) as avg_salary,
MAX(salary) as max_salary,
MIN(salary) as min_salary
FROM employees
GROUP BY department;

這個查詢為我們提供了有關每個部門的豐富信息:他們有多少員工,平均工資,以及最高和最低工資。這就像對我們圖書館中的每個類型進行綜合報告!

GROUP BY 語句在單一列上的應用

有時候,我們只想關注數據的一個方面。讓我們說我們想知道每個職位有多少員工:

SELECT job_title, COUNT(*) as employee_count
FROM employees
GROUP BY job_title;

這個查詢按照員工的職位進行分組,並計算每個職位有多少人。這就像計算我們圖書館中有多少本推理小說、浪漫小說和科幻小說。

GROUP BY 語句與多列

但為什麼要停在一步?我們可以通過多列進行分組以獲得更多信息。讓我們按照部門和職位對員工進行分組:

SELECT department, job_title, COUNT(*) as employee_count
FROM employees
GROUP BY department, job_title;

這個查詢告訴我們在每個部門中的每個職位有多少員工。這就像先按類型組織我們的書籍,然後在每個類型中按作者進行組織。

GROUP BY 與 ORDER BY 語句

現在,讓我們為我們的結果添加一些順序。ORDER BY 語句幫助我們對分組數據進行排序:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
ORDER BY employee_count DESC;

這個查詢按照部門對員工進行分組,計算他們的數量,然後按員工數量的降序對結果進行排序。我們會先看到員工數量最多的部門。這就像將我們的書籍類型從最多到最少進行排列。

GROUP BY 與 HAVING 語句

最後但同樣重要的是,讓我們來談談 HAVING 語句。當 WHERE 語句在分組之前過濾行時,HAVING 語句過濾群組本身。這就像說:"只顯示有超過100本書的類型。"

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING employee_count > 50;

這個查詢只顯示員工數量超過50人的部門。這是一種關注較大部門的好方法,或者在我們的圖書館比喻中,關注較受歡迎的類型。

至於這些,各位!我們已經從 GROUP BY 的基本使用到與多列、ORDER BY 和 HAVING 語句的複雜應用一起穿越了 GROUP BY 的領域。記住,熟練才能精通,所以不要害怕在你自己的數據集上嘗試這些查詢。

SQL 最初可能看起來讓人却步,但隨著時間和練習,你會像專家一樣進行分組和聚合數據。誰知道呢?你可能甚至會開始用分組和聚合的視角來看世界!(只是不要在派對上對你的朋友進行 GROUP BY —— 記住我,這行不通。)

持續編程,持續學習,最重要的是,繼續在 SQL 中找到樂趣!

Credits: Image by storyset