SQL 聚合函數(Aggregate Functions)詳解

更新日期: 2025 年 3 月 4 日

在 SQL 中,聚合函數(Aggregate Functions) 是用來對多筆資料進行計算的函數,能夠幫助我們快速獲取統計資訊。例如:

  • 計算總數(COUNT)
  • 求總和(SUM)
  • 計算平均值(AVG)
  • 找出最大值(MAX)與最小值(MIN)

這些函數在資料分析、報表生成和數據處理中都非常重要。本篇文章將詳細介紹 SQL 常見的聚合函數、使用方式,以及如何搭配 GROUP BYHAVING 來進行進階查詢。


什麼是 SQL 聚合函數?

「聚合」這個詞的英文是 “Aggregate”,它的意思是「集合、合併、彙總」。

在 SQL 中,聚合函數(Aggregate Functions)之所以被這樣命名,是因為它們的主要作用就是對多筆數據進行合併計算,並返回單一結果

這些函數不會影響原始數據,而是對數據進行統計計算。

具體來說,SQL 聚合函數的「聚合」含義包括:

  1. 將多筆資料組合在一起,並產生一個總結值
    • SUM() 會將某個欄位的所有數值加總,返回一個總和
    • AVG() 會將所有數值相加後取平均值
    • COUNT() 會統計資料筆數
  2. 分組計算(GROUP BY)時,將數據按類別彙總後進行計算
    • 例如,統計每個客戶的購買總額時,SQL 會先按照客戶 ID 分組,然後再對每組內的數據進行聚合計算。
  3. 只返回「單一」結果
    • 和一般的 SQL 查詢不同,聚合函數不是返回多筆記錄,而是將多筆記錄「合併」為單一結果

常見的 SQL 聚合函數包括:

函數說明
COUNT()計算資料筆數
SUM()計算總和
AVG()計算平均值
MAX()取得最大值
MIN()取得最小值

COUNT():計算資料筆數

用途

COUNT() 用來計算某個欄位中不為 NULL 的資料筆數,或者統計整個表格中的記錄數。

範例

假設我們有一張 Orders 表:

OrderIDCustomerIDTotalAmount
1101200
2102150
3103NULL
4101300
5NULL400

計算總筆數

SELECT COUNT(*) AS TotalOrders FROM Orders;

🔹 結果: TotalOrders = 5

計算 CustomerID 不為 NULL 的筆數

SELECT COUNT(CustomerID) AS TotalCustomers FROM Orders;

🔹 結果: TotalCustomers = 4(因為 CustomerID 有一筆是 NULL


SUM():計算總和

用途

SUM() 用來計算數值型欄位的總和,通常用於銷售金額、工資、訂單數量等累積計算。

範例

計算所有訂單的總金額:

SELECT SUM(TotalAmount) AS TotalRevenue FROM Orders;

🔹 結果: TotalRevenue = 1050(忽略 NULL 值)


AVG():計算平均值

用途

AVG() 用來計算某個數值欄位的平均值,通常用於薪資、評分、銷售金額等數據分析。

範例

計算訂單的平均金額:

SELECT AVG(TotalAmount) AS AverageOrderValue FROM Orders;

🔹 結果: AverageOrderValue = 262.5(計算時忽略 NULL 值)


MAX() & MIN():取得最大值與最小值

用途

  • MAX() 返回指定欄位的最大值
  • MIN() 返回指定欄位的最小值

範例

查詢最高與最低的訂單金額

SELECT MAX(TotalAmount) AS HighestOrder, MIN(TotalAmount) AS LowestOrder FROM Orders;

🔹 結果:

HighestOrderLowestOrder
400150

搭配 GROUP BY 進行分組統計

聚合函數通常與 GROUP BY 一起使用,來針對不同分類進行統計計算。

範例:計算每個客戶的訂單總金額

SELECT CustomerID, SUM(TotalAmount) AS TotalSpent
FROM Orders
GROUP BY CustomerID;

🔹 結果:

CustomerIDTotalSpent
101500
102150
1030 (NULL)

🔸 GROUP BY 讓我們可以CustomerID 分組,然後計算每個客戶的訂單總額。


搭配 HAVING 來篩選統計結果

如果我們想篩選出 訂單總額超過 200 的客戶,可以使用 HAVING

SELECT CustomerID, SUM(TotalAmount) AS TotalSpent
FROM Orders
GROUP BY CustomerID
HAVING SUM(TotalAmount) > 200;

🔹 結果:

CustomerIDTotalSpent
101500

💡 注意WHERE 不能用於 SUM()AVG() 等聚合函數,因為 WHERE 在分組前篩選,而 HAVING 則是在分組後篩選結果。


COUNT(DISTINCT):計算唯一值數量

如果我們想知道有多少 不同的客戶 下過訂單,可以使用:

SELECT COUNT(DISTINCT CustomerID) AS UniqueCustomers FROM Orders;

🔹 結果: UniqueCustomers = 3


聚合函數的常見問題

COUNT(*) vs COUNT(column)

  • COUNT(*):計算表內所有記錄的筆數(包括 NULL
  • COUNT(column):計算該欄位內非 NULL 值的筆數

NULL 值的影響

  • SUM(), AVG(), MAX(), MIN() 會忽略 NULL
  • COUNT(column) 也不會計算 NULL
  • 若想將 NULL 當作 0 計算,可以使用 COALESCE(column, 0)
SELECT SUM(COALESCE(TotalAmount, 0)) AS TotalRevenue FROM Orders;

結語

SQL 聚合函數 是數據分析和報表製作中最常用的工具之一,能夠幫助我們快速統計數據:

  • COUNT():計算筆數
  • SUM():計算總和
  • AVG():計算平均值
  • MAX() & MIN():取得最大值與最小值
  • 搭配 GROUP BY & HAVING 進行分組統計

透過這些函數,你可以輕鬆進行數據分析,讓查詢結果更具商業價值!希望這篇文章能幫助你更好地理解 SQL 聚合函數

Similar Posts