sql >> データベース >  >> RDS >> Oracle

OracleのRANK()関数とDENSE_RANK()関数の違いは何ですか?

    RANKは、注文したパーティション内のランキングを提供します。タイには同じランクが割り当てられ、次のランクはスキップされます。したがって、ランク2に3つのアイテムがある場合、次にリストされるランクは5にランク付けされます。

    DENSE_RANKは、順序付けられたパーティション内のランキングを再び提供しますが、ランクは連続しています。複数のアイテムがあるランクがある場合、ランクはスキップされません。

    nullについては、ORDERBY句に依存します。何が起こるかを確認するために試すことができる簡単なテストスクリプトを次に示します。

    with q as (
    select 10 deptno, 'rrr' empname, 10000.00 sal from dual union all
    select 11, 'nnn', 20000.00 from dual union all
    select 11, 'mmm', 5000.00 from dual union all
    select 12, 'kkk', 30000 from dual union all
    select 10, 'fff', 40000 from dual union all
    select 10, 'ddd', 40000 from dual union all
    select 10, 'bbb', 50000 from dual union all
    select 10, 'xxx', null from dual union all
    select 10, 'ccc', 50000 from dual)
    select empname, deptno, sal
         , rank() over (partition by deptno order by sal nulls first) r
         , dense_rank() over (partition by deptno order by sal nulls first) dr1
         , dense_rank() over (partition by deptno order by sal nulls last) dr2
     from q; 
    
    EMP     DEPTNO        SAL          R        DR1        DR2
    --- ---------- ---------- ---------- ---------- ----------
    xxx         10                     1          1          4
    rrr         10      10000          2          2          1
    fff         10      40000          3          3          2
    ddd         10      40000          3          3          2
    ccc         10      50000          5          4          3
    bbb         10      50000          5          4          3
    mmm         11       5000          1          1          1
    nnn         11      20000          2          2          2
    kkk         12      30000          1          1          1
    
    9 rows selected.
    

    ここに良い説明といくつかの例へのリンクがあります。



    1. SQLiteOpenHelperを使用してAndroidでsqliteデータベースをアタッチする

    2. psycopg2==2.6.2のインストール中にエラーが発生しました

    3. SQL Serverのリンクサーバーからテーブルのリストを返す(T-SQLの例)

    4. SQLServerのあるデータベースから別のデータベースにテーブルをコピーする