我們先前介紹了SQL中如何根據指定的條件來篩選資料,僅返回符合條件的結果。本篇我們來討論於MS SQL Server 聚合函數(Aggregate Functions) ,用於對數據進行匯總計算,適合分析銷售總額、平均利潤等。
以下我們會使用Tableau 的Superstore 銷售分析的範例資料集,包含訂單、客戶、產品和地區資訊。根據線上資源,常見欄位包括 Order ID、Customer ID、Order Date、Segment、Region、Product ID、Category、Sub-Category、Sales、Quantity、Discount 和 Profit等。聚合函數
SUM()
:計算總和
SELECT SUM([Sales]) AS [TotalSales]
FROM [dbo].[Superstore_Orders];
AVG()
:計算平均
AVG()
用於計算欄位的平均值,例如計算每筆資料每列平均銷售額:
SELECT AVG([Sales]) AS [AvgSales]
FROM [dbo].[Superstore_Orders];
COUNT()
:計算筆數
COUNT(*)
計算所有資料筆數
SELECT COUNT(*) AS [RowCounts]
FROM [dbo].[Superstore_Orders];
此結果回傳9994筆資料。
COUNT(欄位)
:計算該欄位非空值的筆數
SELECT COUNT([Postal Code]) [Postal_Code_Counts]
FROM [dbo].[Superstore_Orders];
此結果回傳9983筆資料,並提供一個資訊,並非所有資料筆數的[Postal Code]欄位皆為非空值、有11筆資料為空值(null)。
COUNT(DISTINCT 欄位)
:計算不重複的值
SELECT COUNT(DISTINCT[Postal Code]) [Unique_Postal_Code_Counts]
FROM [dbo].[Superstore_Orders]
此結果回傳630筆資料。
MAX()
&MIN()
:最大/最小值
查詢最高銷售額的訂單
SELECT MAX([Sales]) AS MaxSales
FROM [dbo].[Superstore_Orders];
STDEV()
:計算銷售額的標準差
SELECT STDEV([Sales]) AS [Sales_StdDev]
FROM [dbo].[Superstore_Orders];
VAR()
計算利潤的變異數
SELECT VAR([Profit]) AS [Profit_Variance]
FROM [dbo].[Superstore_Orders];
結合多個聚合函數: 計算總銷售額、平均數量和最大利潤
SELECT SUM([Sales]) as [Total_Sales],
AVG([Quantity]) as [Avg_Quantity],
MAX([Profit]) as [Max_Profit]
FROM [dbo].[Superstore_Orders];
處理空值
上方提到的計算[Postal Code]筆數,若需要計算空值,可以搭配COALESCE()或ISNULL()轉為非空值再進行計算。

搭配Where
當使用聚合函數與 WHERE 時,需特別注意 WHERE 在聚合前的角色, WHERE
會先篩選數據,然後聚合函數再對篩選後的數據進行計算。
計算標準運送方式的總銷售額
WHERE 子句先過濾 [Ship Mode] 為 'Standard Class' 的資料,然後 SUM 計算這些行的 Sales 總和。
SELECT SUM([Sales]) AS Total_Sales
FROM [dbo].[Superstore_Orders]
WHERE [Ship Mode] = 'Standard Class';
計算 2018 年所有訂單的總數量
SELECT SUM([Quantity]) AS [Total_Quantity]
FROM [dbo].[Superstore_Orders]
WHERE YEAR([Order Date]) = 2018;
計算辦公用品類別的不重複客戶數
SELECT COUNT(DISTINCT [Customer ID]) AS Unique_Customers
FROM [dbo].[Superstore_Orders]
WHERE Category = 'Office Supplies';
謝謝您花時間將此篇文章讀完,若覺得對您有幫助可以幫忙按個讚、分享來或是珍藏喔!也歡迎Follow我的Threads,持續追蹤生產力工具、商業分析、商業英文的實用範例,提升自己的職場力喔!