關聯式資料庫採正規化儲存,分析時需透過 GROUP BY 將分散資料彙總。以 Northwind 範例資料庫示範實務技巧。
查詢各訂單的商品項目數:
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
錯誤示範: 若 SELECT 清單含非彙總欄位(如 o.OrderID)卻未加入 GROUP BY,將報錯 Msg 8118。
統計各客戶購買各類產品總量:
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 BYORDER BY 可使用彙總別名(如 NumItems)WHERE 過濾發生在分組前,HAVING 過濾發生在分組後FROM/JOIN/WHERE 確認資料來源正確ORDER BY 讓結果可讀熟練 GROUP BY,即能從正規化資料中快速產出商業決策所需的彙總報表。