聚合函數是 SQL 統計分析的核心工具。Oracle 提供豐富的聚合函數族群,支援 DISTINCT/ALL 修飾符、多種資料型別與空值處理語義。本文系統整理五大核心聚合函數的語法、參數、返回值與完整測試案例。
CREATE TABLE table3 (xm VARCHAR2(8), sal NUMBER(7,2));
INSERT INTO table3 VALUES ('gao', 1111.11);
INSERT INTO table3 VALUES ('gao', 1111.11);
INSERT INTO table3 VALUES ('zhu', 5555.55);
COMMIT;
-- 含空值測試
INSERT INTO table3 VALUES ('', 1111.11);
INSERT INTO table3 VALUES ('zhu', 0);
COMMIT;
ALL(預設)計算所有值,DISTINCT 去重後計算SELECT AVG(DISTINCT sal), AVG(ALL sal), AVG(sal) FROM table3;
-- 結果:3333.33, 2592.59, 2592.59
SELECT SUM(DISTINCT sal), SUM(ALL sal), SUM(sal) FROM table3;
-- 結果:6666.66, 7777.77, 7777.77
SELECT VARIANCE(DISTINCT sal), VARIANCE(ALL sal), VARIANCE(sal) FROM table3;
-- 結果:9876523.4568, 6584348.9712, 6584348.9712
| 語法 | 語義 | 空值處理 |
|---|---|---|
COUNT(*) | 滿足條件的總行數 | 包含 NULL 行 |
COUNT(x) / COUNT(ALL x) | x 非 NULL 的行數 | 忽略 NULL |
COUNT(DISTINCT x) | x 非 NULL 的去重值個數 | 忽略 NULL |
SELECT COUNT(*), COUNT(xm), COUNT(ALL xm), COUNT(DISTINCT sal), COUNT(ALL sal), COUNT(sal), SUM(1) FROM table3;
-- 結果:5, 4, 4, 3, 5, 5, 5
等價關係:COUNT(*) = SUM(1)
SELECT MIN(DISTINCT sal), MIN(xm), MIN(DISTINCT xm), MIN(ALL xm) FROM table3;
-- 結果:0, 'gao', 'gao', 'gao'
| 特性 | AVG/SUM/VARIANCE | COUNT | MIN/MAX |
|---|---|---|---|
| 適用型別 | 僅數值 | 所有型別 | 數值/字元/日期 |
| DISTINCT 效果 | 去重後計算 | 去重計數 | 去重無意義(極值不變) |
| NULL 處理 | 忽略 | COUNT(*) 含 NULL,其餘忽略 | 忽略 |
| 空表返回 | NULL | 0 | NULL |
SUM(CASE WHEN sal > 2000 THEN 1 ELSE 0 END) 實現多維統計GROUP BY ROLLUP/CUBE/GROUPING SETS 產生多層級彙總AVG(sal) OVER (PARTITION BY dept) 保留明細行同時顯示組統計APPROX_COUNT_DISTINCT、APPROX_MEDIAN 針對海量資料近似計算掌握聚合函數的細微語義差異(特別是 NULL 與 DISTINCT 的交互),是編寫正確、高效統計查詢的基礎。