掌握 ORDER BY、GROUP BY、聚合函數與進階分組統計(ROLLUP、CUBE、GROUPING)是 SQL 資料分析的基石。本文系統整理十大核心場景,附帶標準語法與實務範例,助您撰寫高效、精確的分析查詢。
ORDER BY 讓資料有序呈現SELECT col1, col2 FROM table_name ORDER BY col1 ASC, col2 DESC;
ASC 遞增,DESC 遞減GROUP BY 回傳唯一值組合SELECT ZIP FROM Customers GROUP BY ZIP;
SELECT 清單需包含分組欄位或聚合函數ORDER BYGROUP BY 中使用別名WHERE 先過濾再分組SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ZIP;
WHERE 在 GROUP BY 前執行GROUP BY ALL(SQL Server/Access 支援)SELECT ZIP, COUNT(ZIP) AS KYCustomersByZIP
FROM Customers WHERE State = 'KY' GROUP BY ALL ZIP;
WHERE 的分組聚合值為 0LEFT JOIN 子查詢達成同樣效果HAVING 針對聚合結果條件SELECT ZIP, COUNT(ZIP) AS CustomersByZIP
FROM Customers GROUP BY ZIP HAVING COUNT(ZIP) = 1;
HAVING 在 GROUP BY 後執行,可使用聚合函數WHERE 過濾列,HAVING 過濾組WHERE(列級)與 HAVING(組級)WHERE vs HAVING 執行順序口訣FROM / JOINWHERE(列過濾)GROUP BY(分組)聚合函數(計算)HAVING(組過濾)SELECT(投影)ORDER BY(排序)SELECT OrderID, SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY OrderID;
常用聚合:COUNT、SUM、AVG、MIN、MAX、STDDEV。
WITH ROLLUP 產生超級彙總列SELECT Customer, OrderNumber, SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY Customer, OrderNumber WITH ROLLUP;
DISTINCT 聚合與 GROUP BY ALLWITH CUBE 產生所有維度組合SELECT Customer, OrderNumber, SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY Customer, OrderNumber WITH CUBE;
ROLLUP 所有列,另加每維度獨立小計GROUP BY ALLGROUPING() 函數SELECT GROUPING(Customer) AS IsCustTotal, OrderNumber,
SUM(Cost * Quantity) AS OrderTotal
FROM Orders GROUP BY Customer, OrderNumber WITH CUBE;
1 表示該列為 ROLLUP/CUBE 產生的統計列0 表示為原始明細列GROUP BYWHERE 縮減輸入列再分組CUBE 易產生龐大結果集,考慮物化視圖或 OLAP 引擎ROLLUP,CUBE 需 8.0.1+;PostgreSQL、SQL Server、Oracle 早已支援熟練運用這十大模式,即能應對從簡單報表到複雜多維分析的大多數 SQL 統計需求,奠定資料分析師與後端工程師的核心查詢能力。