Oracle 分組統計實戰:GROUP BY 與 COUNT 組合查詢範例
分組統計是商業報表最常見的需求。本文以簡單範例示範如何使用 GROUP BY 搭配聚合函數快速產出統計結果。
範例資料
| ID | CO | NAME | JOB |
| 1 | IBM | JACK | PM |
| 2 | Google | TOM | PM |
| 3 | IBM | JIM | PM |
需求:統計各公司 (CO) 的員工人數
SELECT t.co, COUNT(t.name) AS emp_cnt
FROM tab_test t
GROUP BY t.co;
結果
進階變化
- 多欄位分組:
GROUP BY t.co, t.job 統計各公司各職稱人數。
- 過濾分組:
HAVING COUNT(*) > 1 僅顯示員工數 > 1 的公司。
- 子查詢作為來源:
FROM (SELECT ... FROM ... WHERE ...) t 先篩選再分組。
- ROLLUP/CUBE:
GROUP BY ROLLUP(t.co) 產生小計與總計列。
效能提示
- 分組欄位若有索引,優化器可採用
SORT GROUP BY NOSORT 避免排序。
- 大量資料分組考慮
PARALLEL 提示或分區表分區裁剪。
- 避免在
GROUP BY 欄位上使用函數(如 TRUNC(dt)),改用函數索引或物化視圖預先計算。