oracle分析函數淺析

DENSE_RANK(),RANK()區別
說明:DENSE_RANK(),RANK()是oracle自帶的分析函數,經常被用於在分組後的組內對某一字段的建立序列的方法,它們的區別在於相同字段值的處理不同

範例:

select deptno,cname,sal,
 dense_rank()
  over (partition by deptno
   order by sal desc) dr,
 rank()
  over (partition by deptno
   order by sal desc) r
 from emp
 order by deptno,sal desc
/

結果:

    DEPTNO ENAME             SAL         DR          R
---------- ---------- ---------- ---------- ----------
        10 KING             5000          1          1
        10 CLARK            2450          2          2
        10 MILLER           1300          3          3
        20 SCOTT            3000          1          1
        20 FORD             3000          1          1
        20 JONES            2975          2          3
        20 ADAMS            1100          3          4
        30 BLAKE            2850          1          1
        30 TURNER           1500          2          2
        30 WARD             1250          3          3
        30 MARTIN           1250          3          3
        30 JAMES             950          4          5
        30 ALLEN             600          5          6


分析函數中WINDOWS子句

RANGE
分析的字段必須是日期或數字型,根據當前分析行值進行比較、運算
ROWS
字段可以是任意類型,是行的物理數

WINDOWS子句中的sepcific 字句

UNBOUNDED PRECEDING
排序後從當前分區的第一行開始,結束與正在處理的當前行
CURRENT ROW
從當前行開始(並結束)
NUMERIC EXPRESSION PRECEDING
排序後從當前行之前的數字表達式開始
NUMERIC EXPRESSION FOLLOWING
排序後從當前行直到當前行之後的數字表達式結束
BETWEEN NUMERIC EXPRESSION1 AND NUMERIC EXPRESSION2 FOLLOWING
在以當前行爲基準,兩個數字的範圍內

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章