レコードに順番を付けるには、ROW_NUMBER~OVER関数を使用します。
サンプル
以下データをサンプルとします。
CD | SCORE |
---|---|
101 | 60 |
102 | 70 |
103 | 80 |
104 | 70 |
105 | 50 |
例1)score列の昇順に順番を表示する
1 2 3 4 5 6 |
SELECT ROW_NUMBER() OVER(ORDER BY score asc) AS rownum, cd, score FROM m_user; |
昇順を表す「asc」は省略可能です。
- 実行結果
- ROWNUM CD SCORE -------- --------- -------- 1 105 50 2 101 60 3 102 70 4 104 70 5 103 80
例2)score列の降順に順番を表示する
1 2 3 4 5 6 |
select ROW_NUMBER() OVER(ORDER BY score desc) AS rownum, cd, score from m_user; |
- 実行結果
- ROWNUM NAME SCORE -------- --------- -------- 1 103 80 2 104 70 3 102 70 4 101 60 5 105 50
解説
- ROW_NUMBER()は同じ値が複数ある場合でも異なる番号を表示します。
- 同じ値の場合には同じ番号を表示させたい場合は、RANK()を使用します。
関連ページ
- [ORACLE関数] 順位を飛ばして順位を付ける(RANK~OVER)
- [ORACLE関数] 順位を飛ばさずに順位を付ける(DENSE_RANK)
- [ORACLE関数] レコードに順番を付ける(ROW_NUMBER~OVER)
- [ORACLE関数] グループ単位で順位を飛ばして順位を付ける(RANK~PARTITION BY)
- [ORACLE関数] グループ単位で順位を飛ばさずに順位を付ける(DENSE_RANK~PARTITION BY)
- [ORACLE関数] グループ単位にレコードに順番を付ける(ROW_NUMBER~PARTITION)