分析函式DENSE_RANK 和 RANK

newknight發表於2013-11-29

分析函式DENSE_RANK RANK

SQL中對錶格資料排名時,常可以用到分析排名函式,但Oracle在排名上有兩種不同的函式:dense_rankrank

這兩種函式在分析的用途上大同小異,主要區別在於對相同資料的排名。

實際舉例如下。

列出示例資料:

SQL> Select rownum id from dual connect by rownum<5

  2  union all

  3  select rownum id from dual connect by rownum<3;

 

        ID

----------

         1

         2

         3

         4

         1

         2

 

6 rows selected

可見資料上id1,2的都重複了,那麼它們的排名應該是一樣的,那麼id3的話,應該排第幾位呢。

注意以下dense_rankrank在對id3的排名的區別。

SQL> with t as (

  2  select rownum id from dual connect by rownum<5

  3  union all

  4  select rownum id from dual connect by rownum<3)

  5  select dense_rank() over (order by id) rank,

  6         id

  7    from t;

 

      RANK         ID

---------- ----------

         1          1

         1          1

         2          2

         2          2

         3          3

         4          4

 

6 rows selected

SQL> with t as (

  2  select rownum id from dual connect by rownum<5

  3  union all

  4  select rownum id from dual connect by rownum<3)

  5  select rank() over (order by id) rank,

  6         id

  7    from t;

 

      RANK         ID

---------- ----------

         1          1

         1          1

         3          2

         3          2

         5          3

         6          4

 

6 rows selected

可見dense_rank在處理重複資料的排名時,屬於密集型排名,而rank則不是。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10009036/viewspace-1061589/,如需轉載,請註明出處,否則將追究法律責任。

相關文章