【Oracle】RANK関数でデータの順位を付ける方法

Oracleデータベースでデータの順位を付けるために使用されるRANK関数について紹介します。

RANK関数とは?

RANK関数は、指定された順序に基づいてデータの順位を付けるために使用されます。同じ値のデータが存在する場合は同じランクが付与され、次のランクはスキップされるという特徴があります。

RANK関数の基本構文

まず、RANK関数の基本的な構文を見てみましょう。

RANK() OVER ([PARTITION BY partition_expression] ORDER BY order_expression)
  • PARTITION BY: データを特定のグループに分けるために使用します(オプション)。
  • ORDER BY: ランキングを付けるためのソート基準を指定します。

シンプルなRANK関数の使用例

従業員のテーブル(EMPLOYEES)があり、各従業員の給与(SALARY)に基づいてランクを付けたい場合は、以下のようにクエリを記述します。

SELECT 
    EMPLOYEE_ID,
    SALARY,
    RANK() OVER (ORDER BY SALARY DESC) AS SALARY_RANK
FROM 
    EMPLOYEES;

このクエリは、従業員の給与に基づいて降順でランクを付け、結果を表示します。

部門ごとのランクを取得する方法

部門ごとに従業員の給与に基づいてランクを付けたい場合、PARTITION BY句を使用します。以下の例を見てください。

SELECT 
    DEPARTMENT_ID,
    EMPLOYEE_ID,
    SALARY,
    RANK() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) AS DEPT_SALARY_RANK
FROM 
    EMPLOYEES;

このクエリは、各部門ごとに従業員の給与をランク付けし、部門内での順位を表示します。

同じランクが存在する場合の挙動

同じ給与の従業員が複数いる場合のRANK関数の挙動を確認してみましょう。以下のようなデータがあるとします。

EMPLOYEE_ID SALARY
1 5000
2 4500
3 4500
4 4000

上記のクエリを実行すると、結果は次のようになります。

EMPLOYEE_ID SALARY SALARY_RANK
1 5000 1
2 4500 2
3 4500 2
4 4000 4

ここで、EMPLOYEE_ID 2と3は同じ給与のため、同じランク2が付けられ、次のランクは4になります。

まとめ

OracleのRANK関数を使えば、データセットに対して簡単に順位を付けることができます。同じランクのデータがある場合でも、スキップされたランクによりデータ分析が容易になります。PARTITION BY句を使用することで、特定のグループごとにランクを付けることも可能です。ぜひ、このガイドを参考にして、RANK関数を使ったデータ分析を実践してみてください。