在資料庫操作中,聚合查詢是統計分析的核心工具。本文以 SQL Server 2008 為例,詳細解說聚合函數、GROUP BY 分組、HAVING 條件篩選以及 ORDER BY 排序的實戰應用,並附上完整範例資料與執行結果。
以下為示範用的 Shohin(商品)資料表,包含 8 筆記錄:
+-----------+------------+---------------+--------------+--------------+------------+ | shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi | +-----------+------------+---------------+--------------+--------------+------------+ | 0001 | T恤 | 衣服 | 1000 | 500 | 2009-09-20 | | 0002 | 打孔器 | 辦公用品 | 500 | 320 | 2009-09-11 | | 0003 | 運動T恤 | 衣服 | 4000 | 2800 | NULL | | 0004 | 菜刀 | 廚房用具 | 3000 | 2800 | 2009-09-20 | | 0005 | 高壓鍋 | 廚房用具 | 6800 | 5000 | 2009-01-15 | | 0006 | 叉子 | 廚房用具 | 500 | NULL | 2009-09-20 | | 0007 | 擦菜板 | 廚房用具 | 880 | 790 | 2008-04-28 | | 0008 | 圓珠筆 | 辦公用品 | 100 | NULL | 2009-11-11 | +-----------+------------+---------------+--------------+--------------+------------+
聚合函數可對資料行進行統計運算,常用函數如下:
COUNT(*) 包含 NULL 值;COUNT(欄位名) 排除 NULL。進階用法:在聚合函數中使用 DISTINCT 可去除重複值,例如 COUNT(DISTINCT shohin_bunrui) 計算商品分類種類數。
GROUP BY 子句如同「切割資料表的刀」,依指定欄位將資料分組,再配合聚合函數產生摘要資訊。
SELECT shohin_bunrui, COUNT(*) FROM Shohin GROUP BY shohin_bunrui;
結果:
+---------------+----------+ | shohin_bunrui | COUNT(*) | +---------------+----------+ | 辦公用品 | 2 | | 廚房用具 | 4 | | 衣服 | 2 | +---------------+----------+
子句撰寫順序(不可更動):
SELECT → FROM → WHERE → GROUP BY
DBMS 內部執行順序:
FROM → WHERE → GROUP BY → SELECT
WHERE 篩選「列」,HAVING 篩選「組」。
SELECT shohin_bunrui, COUNT(*) FROM Shohin GROUP BY shohin_bunrui HAVING COUNT(*) = 2;
結果: 僅保留筆數等於 2 的分類(辦公用品、衣服)。
SELECT shohin_bunrui, AVG(hanbai_tanka) FROM Shohin GROUP BY shohin_bunrui HAVING AVG(hanbai_tanka) >= 2500;
結果: 廚房用具 (2795)、衣服 (2500)。
HAVING 可用元素: 常數、聚合函數、GROUP BY 分組鍵。
執行順序: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
ORDER BY 必須寫在 SELECT 陳述式最末端,因排序動作在結果返回前執行。
ASC 遞增;DESC 遞減。SELECT shohin_bunrui, COUNT(*) FROM Shohin GROUP BY shohin_bunrui ORDER BY COUNT(*);
結果: 辦公用品(2)、衣服(2)、廚房用具(4)。
| 撰寫順序 | 實際執行順序 |
|---|---|
| SELECT | 第 5 項 |
| FROM | 第 1 項 |
| WHERE | 第 2 項 |
| GROUP BY | 第 3 項 |
| HAVING | 第 4 項 |
| ORDER BY | 第 6 項 |
掌握聚合查詢與分組邏輯,是撰寫高效率統計報表 SQL 的關鍵基礎。