聚合函數是 SQL 查詢中進行資料統計分析的核心工具,配合 NVL 處理空值,能靈活解決各類報表需求。本文系統整理 COUNT、MAX、MIN、SUM、AVG 五大聚合函數語法、特性與實戰技巧。
| 函數 | 用途 | 忽略 NULL | 適用資料型別 | 典型範例 |
|---|---|---|---|---|
COUNT(*) | 統計列數 (含 NULL 行) | 否 | 所有 | SELECT COUNT(*) FROM emp; |
COUNT(expr) | 統計非 NULL 值個數 | 是 | 所有 | SELECT COUNT(comm) FROM emp; |
MAX(expr) | 最大值 | 是 | 數值、字串、日期 | SELECT MAX(sal) FROM emp; |
MIN(expr) | 最小值 | 是 | 數值、字串、日期 | SELECT MIN(hiredate) FROM emp; |
SUM(expr) | 加總 | 是 | 數值 | SELECT SUM(sal) FROM emp WHERE deptno=10; |
AVG(expr) | 平均值 | 是 | 數值 | SELECT AVG(sal) FROM emp; |
SELECT deptno, COUNT(*), AVG(sal), MAX(sal), MIN(sal), SUM(sal) FROM emp GROUP BY deptno;
SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno HAVING AVG(sal) > 2000;
SELECT COUNT(DISTINCT job) FROM emp; -- 統計不重複職稱種類數
聚合函數自動忽略 NULL,但某些業務邏輯需將 NULL 視為 0 或其他預設值:
-- 將 comm 空值視為 0 參與加總與平均 SELECT SUM(NVL(comm, 0)), AVG(NVL(comm, 0)) FROM emp; -- NVL2: 值非 NULL 回傳第二參數,NULL 回傳第三參數 SELECT ename, NVL2(comm, '有獎金', '無獎金') FROM emp; -- COALESCE: 回傳第一個非 NULL 引數 (ANSI 標準,支援多參數) SELECT COALESCE(comm, bonus, 0) FROM emp;
SELECT d.dname 部門, COUNT(e.empno) 員工數, ROUND(AVG(NVL(e.sal,0)), 2) 平均薪資, MAX(e.sal) 最高薪資, MIN(e.sal) 最低薪資, SUM(NVL(e.sal,0)) 薪資總額, COUNT(DISTINCT e.job) 職稱種類數 FROM emp e RIGHT JOIN dept d ON e.deptno = d.deptno GROUP BY d.dname ORDER BY 部門;
MIN/MAX 可透過 INDEX FULL SCAN (MIN/MAX) 極速取值。APPROX_COUNT_DISTINCT (12c+) 近似計數,大幅降低資源消耗。記住:
COUNT(*)統計列數最快;COUNT(column)需檢查 NULL;SUM/AVG對 NULL 自動忽略,若業務需視為 0 必須显式NVL;NVL2/COALESCE提供更豐富的空值邏輯控制。