GROUP BY 依指定欄位將資料集劃分為若干群組,再搭配彙總函數(SUM、COUNT、AVG 等)對每群組計算單一結果值。
A| 類別 | 摘要 | 數量 |
|---|---|---|
| a | a2001 | 11 |
| a | a2001 | 2 |
| a | a2002 | 5 |
| b | b2001 | 10 |
| b | b2002 | 8 |
| c | c2001 | 15 |
SELECT 類別, SUM(數量) AS 數量之和 FROM A GROUP BY 類別;
結果:
| 類別 | 數量之和 |
|---|---|
| a | 18 |
| b | 18 |
| c | 15 |
SELECT 類別, SUM(數量) AS 數量之和 FROM A GROUP BY 類別 ORDER BY SUM(數量) DESC;
注意:Access 不支援 ORDER BY 別名,需寫完整彙總運算式;SQL Server 則支援別名排序。
-- 錯誤:摘要未出現在 GROUP BY 也未在彙總函數中 SELECT 類別, SUM(數量) AS 數量之和, 摘要 FROM A GROUP BY 類別;
正確寫法:
摘要 加入 GROUP BY(多欄分組)MAX(摘要)SELECT 類別, 摘要, SUM(數量) AS 數量之和 FROM A GROUP BY 類別, 摘要;
結果會依 類別+摘要 組合分組,上例中 a, a2001 兩筆合併為 13。
補充:GROUP BY ALL 為舊語法(保留無資料群組),未來版本將移除,請改用標準多欄分組。
| 函數 | 說明 | 支援性 |
|---|---|---|
| SUM | 加總 | 通用 |
| AVG | 平均 | 通用 |
| COUNT(*) | 列數(含 NULL) | 通用 |
| COUNT(欄位) | 非 NULL 計數 | 通用 |
| MAX/MIN | 最大/最小值 | 通用 |
| FIRST/LAST | 第一/最後一筆 | 僅 Access |
| 子句 | 執行時機 | 可用彙總函數 | 用途 |
|---|---|---|---|
| WHERE | 分組前 | 不可 | 過濾明細列 |
| HAVING | 分組後 | 可 | 過濾群組 |
-- 僅保留總數量 > 18 的類別 SELECT 類別, SUM(數量) AS 數量之和 FROM A GROUP BY 類別 HAVING SUM(數量) > 18;
COMPUTE 可在明細列後附加彙總行;COMPUTE BY 需搭配 ORDER BY,可產生分組小計。現代開發建議改用 GROUPING SETS、ROLLUP、CUBE 或應用層處理。
GROUP BY col1, col2,避免 GROUP BY ALL。