首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

如何使用 SQL Server 進行資料過濾與彙總分析:GROUP BY 實戰教學

     編輯:關於SqlServer

背景:正規化資料與即時計算

關聯式資料庫採正規化儲存,避免冗余。分析需求 (如「哪個產品訂單最多」、「哪筆訂單利潤最高」) 需在查詢中即時計算,核心工具為 GROUP BY 子句。

範例資料庫:Northwind

包含 Customers、Orders、Order Details、Products 標準範例表。

表結構關聯

SELECT o.OrderID, od.ProductID
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID

從簡單計數到 GROUP BY

嘗試直接計數 (會報錯)

SELECT o.OrderID, COUNT(od.ProductID) AS NumItems
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID
-- 錯誤:o.OrderID 未包含於彙總函數或 GROUP BY 子句中

正確寫法:加入 GROUP BY

SELECT o.OrderID, COUNT(od.ProductID) AS NumItems
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID
GROUP BY o.OrderID
ORDER BY NumItems DESC

依訂單分組計算明細行數,並按數量遞減排序,即得訂單項目最多的前幾筆。

多欄位 GROUP BY 與多彙總欄位

每位客戶各產品採購總量

SELECT c.CompanyName, p.ProductName, SUM(od.Quantity) AS TotalBought
FROM Customers c, Products p, Orders o, [Order Details] od
WHERE c.CustomerID = o.CustomerID
  AND o.OrderID = od.OrderID
  AND od.ProductID = p.ProductID
GROUP BY c.CompanyName, p.ProductName
ORDER BY CompanyName, TotalBought DESC

單一查詢多種彙總:最大單項採購量 + 總採購量

SELECT o.OrderID,
       MAX(od.Quantity) AS TopItem,
       SUM(od.Quantity) AS TotalBought
FROM Orders o, [Order Details] od, Products p
WHERE o.OrderID = od.OrderID
  AND od.ProductID = p.ProductID
GROUP BY o.OrderID
ORDER BY TotalBought DESC

核心規則總結

  • SELECT 清單中未包含於彙總函數的欄位,必須出現在 GROUP BY 中。
  • GROUP BY 可包含多欄位,依序分組層級。
  • HAVING 用於分組後篩選;WHERE 用於分組前篩選 (效率更高)。
  • 善用 ORDER BY 讓結果更易閱讀分析。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved