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関数を使ったデータ分析を実践してみてください。