僅改變輸出順序,不合併行。SELECT ZIP FROM Customers ORDER BY ZIP
SELECT ZIP FROM Customers GROUP BY ZIP; -- 唯一 ZIP 清單
ORDER BYSELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ZIP;
WHERE 在分組前過濾行,不支援聚合函數。
SELECT ZIP, COUNT(ZIP) AS KY_Count
FROM Customers WHERE State = 'KY' GROUP BY ALL ZIP;
非 KY 的 ZIP 也會出現,聚合值為 0。遠端查詢不支援。
SELECT ZIP, COUNT(*) AS Cnt FROM Customers GROUP BY ZIP HAVING COUNT(*) = 1;
只保留單一客戶的 ZIP。口訣:WHERE 過濾行,HAVING 過濾組。
SELECT OrderID, SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY OrderID;
SELECT 可含聚合,GROUP BY 不可。
SELECT Customer, OrderNumber, SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY Customer, OrderNumber WITH ROLLUP;
輸出:各訂單小計 → 各客戶小計 → 總計 (第一行)。
限制:不支援 DISTINCT、GROUP BY ALL。
SELECT Customer, OrderNumber, SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY Customer, OrderNumber WITH CUBE;
在 ROLLUP 基礎上,增加 每個客戶的總計行 (交叉表)。
最全統計,但行數 = (n+1)×(m+1),大維度慎用。
SELECT GROUPING(Customer) AS IsCustTotal, OrderNumber, SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY Customer, OrderNumber WITH CUBE;
SELECT
CASE WHEN GROUPING(Region) = 1 THEN '全區' ELSE Region END AS Region,
CASE WHEN GROUPING(Category) = 1 THEN '全類' ELSE Category END AS Category,
SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY Region, Category WITH CUBE
ORDER BY GROUPING(Region), Region, GROUPING(Category), Category;
輸出:明細 → 類別小計 → 區域小計 → 總計,完美支援報表呈現。