FUNCTION() OVER (PARTITION BY col1 ORDER BY col2)
PARTITION BY:分組,各組內部獨立計算。ORDER BY:組內排序依據。| 函數 | 規則 | 示例(分數降序) |
|---|---|---|
| ROW_NUMBER() | 組內連續唯一編號 1,2,3… | 100,100,90 → 1,2,3 |
| RANK() | 並列同名次,下一名次跳過 | 100,100,90 → 1,1,3 |
| DENSE_RANK() | 並列同名次,下一名次連續 | 100,100,90 → 1,1,2 |
LAG(expr, offset, default) OVER (PARTITION BY ... ORDER BY ...)
-- offset:向前幾行(默認 1),default:超出分區返回值(默認 NULL)
典型用途:計算環比增長、檢測數據跳變。
SELECT deptno, ename, sal,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) rn,
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) rk,
DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) dr,
LAG(sal) OVER (PARTITION BY deptno ORDER BY sal DESC) prev_sal
FROM emp;
輸出將展示各部門薪資排序名次及上一行薪資,便於薪資結構分析。