ランクを計算するRANK
Oracleでランク順をもとめるには「RANK」を使います。
例1. ランク順を取得するパターン
--列1のランクを取得する RANK() OVER (ORDER BY 列1)
ランクを求めるには「RANK() OVER (ORDER BY ~)」とします。指定した列の順にランキングを返します。
--列1のグループ毎に列2のランクを取得する RANK() OVER (PARTITION BY 列1 ORDER BY 列2)
ランクはグループ化することもできます。グループ毎にするには「PARTITION BY ~」を使います。列1のグループ毎に列2の順にランキングを返します。
サンプルデータ
studentテーブル
stu_no | activity | score |
1 | サッカー | 70 |
2 | サッカー | 88 |
3 | 野球 | 95 |
4 | 野球 | 62 |
例1. ランク順を取得するパターン
--点数のランクを取得する SELECT stu_no,activity,score, RANK() OVER (ORDER BY score) score_rank FROM student ORDER BY score_rank;
stu_no | activity | score | score rank |
4 | 野球 | 62 | 1 |
1 | サッカー | 70 | 2 |
2 | サッカー | 88 | 3 |
3 | 野球 | 95 | 4 |
ここでは「RANK() OVER (ORDER BY score)」として「score」をランク順に並び替えました。
例2. グループ化してランク順を取得するパターン
--部活動別の点数のランクを取得する SELECT stu_no,activity,score, RANK() OVER (PARTITION BY activity ORDER BY score) score_rank FROM student ORDER BY activity,score_rank;
stu_no | activity | score | score rank |
1 | サッカー | 70 | 1 |
2 | サッカー | 88 | 2 |
4 | 野球 | 62 | 1 |
3 | 野球 | 95 | 2 |
ここでは「PARTITION BY activity」として「activity」をグループ化し、グループ化した中で「score」をランク順に並び替えました。つまり、部活毎に点数のランクを取得したことになります。
以上、OracleでランクをもとめるRANKでした。
コメント