SQL 按分组进行排序时RANK()、DENSE_RANK()的使用

@グループ単位に、ランキングを表示する(RANK、DENSE_RANK)
按分组进行排序时使用的函数
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

你可能感兴趣的:(SQL 按分组进行排序时RANK()、DENSE_RANK()的使用)