Windows 2000 + Oracle 8.1.7,使用內建 SCOTT.EMP 表(14 筆員工資料,含 DEPTNO、ENAME、SAL)。
| 寫法 | 含義 |
|---|---|
SUM(sal) OVER () | 全表總和,等同 SUM(sal)。 |
SUM(sal) OVER (ORDER BY ename) | 依 ENAME 排序的累加和(Running Total)。 |
SUM(sal) OVER (PARTITION BY deptno ORDER BY ename) | 各部門內依 ENAME 的分區累加和。 |
SUM(sal) OVER (PARTITION BY deptno) | 各部門總和(同部門每列相同)。 |
SUM(sal) OVER (ORDER BY deptno, ename) | 跨部門連續累加和。 |
SELECT deptno, ename, sal,
SUM(sal) OVER (ORDER BY ename) AS 連續求和,
SUM(sal) OVER () AS 總和,
100*ROUND(sal/SUM(sal) OVER (),4) AS "份額(%)",
SUM(sal) OVER (PARTITION BY deptno ORDER BY ename) AS 部門連續求和,
SUM(sal) OVER (PARTITION BY deptno) AS 部門總和,
100*ROUND(sal/SUM(sal) OVER (PARTITION BY deptno),4) AS "部門份額(%)"
FROM emp
ORDER BY deptno, ename;
ORDER BY 決定累加方向,預設 RANGE UNBOUNDED PRECEDING。ROUND(sal/SUM(...) OVER (...),4) 可直接算百分比,免去自連接或子查詢。ROW_NUMBER()、RANK()、DENSE_RANK() 做 Top-N 查詢。ROWS BETWEEN ... 可控制滑動視窗大小(移動平均等)。IGNORE NULLS、RESPECT NULLS 等細節控制。