順位を飛ばさずに順位を付けるには、DENSE_RANK~OVER関数を使用します。
順位を飛ばさずにとは、同順位のデータが存在する場合でも次順を連番で振るという意味です。
サンプル
以下データをサンプルとします。
NO | USER_NM | SCORE |
---|---|---|
01 | 佐藤 | 60 |
02 | 鈴木 | 70 |
03 | 高橋 | 80 |
04 | 伊藤 | 70 |
05 | 田中 | 50 |
例)score列の昇順で順位をつける
1 2 3 4 5 6 |
SELECT DENSE_RANK() OVER(ORDER BY score asc) AS ranking, user_nm, score FROM m_user |
昇順を表す「asc」は省略可能です。
- 実行結果
- RANKING NAME SCORE -------- --------- -------- 1 田中 50 2 佐藤 60 3 伊藤 70 3 鈴木 70 4 高橋 80
例)score列の降順で順位をつける
1 2 3 4 5 6 |
SELECT DENSE_RANK() OVER(ORDER BY score desc) AS ranking, user_nm, score FROM m_user |
- 実行結果
- RANKING NAME SCORE -------- --------- -------- 1 高橋 80 2 鈴木 70 2 伊藤 70 3 佐藤 60 4 田中 50
解説
- DENSE_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)