關聯式資料庫採正規化儲存,避免冗余。分析需求 (如「哪個產品訂單最多」、「哪筆訂單利潤最高」) 需在查詢中即時計算,核心工具為 GROUP BY 子句。
包含 Customers、Orders、Order Details、Products 標準範例表。
SELECT o.OrderID, od.ProductID
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID
SELECT o.OrderID, COUNT(od.ProductID) AS NumItems
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID
-- 錯誤:o.OrderID 未包含於彙總函數或 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
依訂單分組計算明細行數,並按數量遞減排序,即得訂單項目最多的前幾筆。
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 讓結果更易閱讀分析。