ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
グループ単位に、ランキングを表示する(RANK、DENSE_RANK)
スポンサード リンク

グループ単位に、ランキングを表示するには、RANK関数、DENSE_RANK関数を使用する

分析関数のRANK、DENSE_RANKは、ウィンドウ(window)を操作してランキングを取得します。

RANK() 検索レコードの表示順にランキングする
同じ値の場合のランキング方法がそれぞれ異なり、RANK関数は、順位を飛ばし、DENSE_RANK関数は順位を飛ばさずに振ります
DENSE_RANK()
OVER( PRTITION BY 項目1,
              [項目2,・・・]
     ORDER BY 項目1,
              [項目2,・・・] )
RANK関数、DENSE_RANK関数と一緒に使用します
PRTITION BY句には、グループ化対象項目を指定する
ORDERY BY句には、ランキング対象の項目を指定する


 サンプル表「emp」データ
SQL> select * from emp;

EMP DEP JOB FIRST_NAME LAST_NAME SALARY
--- --- --- ---------- ---------- ----------
E01 D01 J01  名字1     名前1     100
E02 D01 J01  名前2     名前2     250
E03 D02 J02  名前3     名前3     200
E04 D02 J03  名前4     名前4     200
E05 D02 J03  名前5     名前5     130
E06 D03 J03  名前6     名前6     150


例1) 列「salary」の小さい順にランキング表示する(RANK)
SQL> select
  2   emp_id,dept_id,job_id,salary,
  3   rank() over(order by salary)
  4  from emp;

EMP DEP JOB SALARY   RANK()OVER(ORDERBYSALARY)
--- ---  --- ---------- -------------------------
E01 D01  J01  100      1
E05 D02  J03  130      2
E06 D03  J03  150      3
E04 D02  J03  200      4
E03 D02  J02  200      4
E02 D01  J01  250      6


例2) 列「salary」の小さい順にランキング表示する(DENSE_RANK)
SQL> select
  2   emp_id,dept_id,job_id,salary,
  3   dense_rank() over(order by salary)
  4  from emp;

EMP DEP JOB SALARY   DENSE_RANK()OVER(ORDERBYSALARY)
--- ---  --- ---------- -------------------------------
E01 D01  J01  100      1
E05 D02  J03  130      2
E06 D03  J03  150      3
E04 D02  J03  200      4
E03 D02  J02  200      4
E02 D01  J01  250      5


例3) 列「dept_id」別に「salary」の小さい順にランキング表示する

SQL> select
2 emp_id,dept_id,job_id,salary,
3 rank() over(partition by dept_id order by salary)
4 from emp;

EMP DEP JOB SALARY   RANK()OVER(PARTITIONBYDEPT_IDORDERBYSALARY)
--- ---  --- ---------- -------------------------------------------
E01 D01 J01 100      1
E02 D01 J01 250      2
E05 D02 J03 130      1
E04 D02 J03 200      2
E03 D02 J02 200      2
E06 D03 J03 150      1



スポンサード リンク


グループ単位に、レコード件数を取得する( COUNT )
グループ単位に、最大値を取得する( MAX )
グループ単位に、平均値を取得する( AVG )
グループ単位に、最小値を取得する( MIN )
グループ単位に、集計する( SUM )
グループ単位に、ランキングを取得する( RANK、DENSE_RANK )
グループ単位に、パーセントランクを取得する( PERCENT_RANK )
グループ単位に、ソートしたレコードの先頭行に集計関数を使用する( KEEP、FIRST )
グループ単位に、ソートしたレコードの最終行に集計関数を使用する( KEEP、LAST )
グループ単位に、ソートしたレコードの先頭行の値を取得する( FIRST_VALUE )
グループ単位に、ソートしたレコードの最終行の値を取得する( LAST_VALUE )
グループ単位に、検索したレコードのn行前のデータを取得する( LAG )
グループ単位に、検索したレコードのn行後のデータを取得する( LEAD )
グループ単位に、検索レコードに順番を付ける( ROW_NUMBER )
グループ単位に、先頭から指定件数のレコードを取得する( ROW_NUMBER )
グループ単位に、n件目のレコードからm件目のレコードを取得する( ROW_NUMBER )
グループ単位に、標準偏差を取得する( STDDEV )
グループ単位に、累積標準偏差を取得する( STDDEV_SAMP )
グループ単位に、母集団標準偏差を取得する( STDDEV_POP )
グループ単位に、分散を取得する( VARIANCE )
グループ単位に、累積分散を取得する( VAR_SAMP )
グループ単位に、母集団分散を取得する( VAR_POP )
グループ単位に、相関係数を取得する( CORR )

SQL(DML) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ