SQL 解鎖 - 聚合函數

SQL 解鎖 - 聚合函數

DigNo Ape-avatar-img
發佈於SQL
更新於 發佈於 閱讀時間約 5 分鐘

我們先前介紹了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():計算筆數
  1. COUNT(*)計算所有資料筆數
SELECT COUNT(*) AS [RowCounts] 
FROM [dbo].[Superstore_Orders];

此結果回傳9994筆資料。


  1. COUNT(欄位):計算該欄位非空值的筆數
SELECT COUNT([Postal Code]) [Postal_Code_Counts]
FROM [dbo].[Superstore_Orders];

此結果回傳9983筆資料,並提供一個資訊,並非所有資料筆數的[Postal Code]欄位皆為非空值、有11筆資料為空值(null)。


  1. 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()轉為非空值再進行計算。

raw-image


搭配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,持續追蹤生產力工具、商業分析、商業英文的實用範例,提升自己的職場力喔!









avatar-img
DigNo Ape 數遊原人
49會員
117內容數
我們秉持著從原人進化的精神,不斷追求智慧的累積和工具的運用來提升生產力。我們相信,每一個成員都擁有無限的潛力,透過學習和實踐,不斷成長和進步。
留言
avatar-img
留言分享你的想法!
DigNo Ape 數遊原人 的其他內容
OVER() 子句是Window Function的核心組成部分,用於在查詢結果集中定義一個「窗口」,使聚合函數或排名函數能夠在不改變原始數據結構的情況下,對特定資料進行計算。常搭配PARTITION BY將數據劃分成多個分群(類似GROUP BY,但不改變資料的結構、粒度),
SQL 中的 Index 是什麼? 加了以後會有什麼影響? 想像你在讀一本厚厚的小說,裡面有幾百頁。如果你想要找到某個關鍵情節,比如「主角第一次登場的地方」,如果你沒有做任何標記,你可能得從頭到尾翻書,直到找到那一頁為止,這樣會花很多時間。 ▌Index 就像書籤一樣
上一篇我們介紹了SQL基本架構和語法,如何用簡單的SELECT 和 FROM 撈取資料。本篇我們來討論,如何根據指定的條件來篩選資料,僅返回符合條件的結果。
OVER() 子句是Window Function的核心組成部分,用於在查詢結果集中定義一個「窗口」,使聚合函數或排名函數能夠在不改變原始數據結構的情況下,對特定資料進行計算。常搭配PARTITION BY將數據劃分成多個分群(類似GROUP BY,但不改變資料的結構、粒度),
SQL 中的 Index 是什麼? 加了以後會有什麼影響? 想像你在讀一本厚厚的小說,裡面有幾百頁。如果你想要找到某個關鍵情節,比如「主角第一次登場的地方」,如果你沒有做任何標記,你可能得從頭到尾翻書,直到找到那一頁為止,這樣會花很多時間。 ▌Index 就像書籤一樣
上一篇我們介紹了SQL基本架構和語法,如何用簡單的SELECT 和 FROM 撈取資料。本篇我們來討論,如何根據指定的條件來篩選資料,僅返回符合條件的結果。