【Oracle】RANK でランクを求める【SQL】

ランクを計算する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」をランク順に並び替えました。つまり、部活毎に点数のランクを取得したことになります。

参照:Database SQL言語リファレンス RANK

以上、OracleでランクをもとめるRANKでした。

コメント