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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值