順位を飛ばして順位を付けるには、RANK~OVER関数を使用します。
順位を飛ばしてとは、同順位のデータが存在する場合は次順を空き番で振るという意味です。
サンプル
以下データをサンプルとします。
NO | USER_NM | SCORE |
---|---|---|
01 | 佐藤 | 60 |
02 | 鈴木 | 70 |
03 | 高橋 | 80 |
04 | 伊藤 | 70 |
05 | 田中 | 50 |
例1)score列の昇順で順位を付ける
1 2 3 4 5 6 |
select rank() over(order by score) as ranking, user_nm, score from Record_table; |
昇順を表す「asc」は省略可能です。
- 実行結果
- RANKING NAME SCORE -------- --------- -------- 1 田中 50 2 佐藤 60 3 鈴木 70 3 伊藤 70 5 高橋 80
例2)score列の降順で順位を付ける
1 2 3 4 5 6 |
select rank() over(order by score desc) as ranking, user_nm, score from Record_table; |
- 実行結果
- RANKING NAME SCORE -------- --------- -------- 1 高橋 80 2 鈴木 70 2 伊藤 70 4 佐藤 60 5 田中 50
解説
- RANK~OVER関数は、OVERの引数に対象カラムと並び順を指定します。
関連ページ
- [ORACLE関数] 順位を飛ばして順位を付ける(RANK~OVER)
- [ORACLE関数] 順位を飛ばさずに順位を付ける(DENSE_RANK)
- [ORACLE関数] レコードに順番を付ける(ROW_NUMBER~OVER)
- [ORACLE関数] グループ単位で順位を飛ばして順位を付ける(RANK~PARTITION BY)
- [ORACLE関数] グループ単位で順位を飛ばさずに順位を付ける(DENSE_RANK~PARTITION BY)
- [ORACLE関数] グループ単位にレコードに順番を付ける(ROW_NUMBER~PARTITION)