首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 窗口函數實戰:ROW_NUMBER、RANK、DENSE_RANK、LAG 詳解

     編輯:Oracle 資料庫基礎

語法通式

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/LEAD 取前後行值

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;

輸出將展示各部門薪資排序名次及上一行薪資,便於薪資結構分析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved