この記事では、SQLのウィンドウ関数を使ってランキングと集計を行う高度な処理について詳しく説明します。ウィンドウ関数はSQLの中でも高度な処理を可能にする機能であり、習得することでデータ分析やレポーティング作業が劇的に効率化します。
目次
ウィンドウ関数とは
ウィンドウ関数は、テーブルの特定の「ウィンドウ」と呼ばれる範囲に対して集計や演算を行うSQLの関数です。通常の集計関数(SUM、COUNT、AVGなど)が全ての行に対して処理を行うのに対し、ウィンドウ関数は指定した範囲だけで処理を行います。
基本的なウィンドウ関数の種類
関数名 | 説明 |
---|---|
ROW_NUMBER() | 行に一意な番号を付与する |
RANK() | ランキングを割り当てる(同じ値は同じ順位) |
DENSE_RANK() | ランキングを割り当てる(同じ値は同じ順位、順位は詰める) |
NTILE(n) | データをn等分する |
SUM() | ウィンドウ内の合計値を計算する |
ウィンドウ関数を使ったランキング
ROW_NUMBER()によるランキング
ROW_NUMBER()関数は、指定されたウィンドウ内で行に一意な番号を付与します。
SELECT name, point,
ROW_NUMBER() OVER (ORDER BY point DESC) AS ranking
FROM players;
具体的な例
以下のテーブルがあるとします。
名前 | 得点 |
---|---|
田中 | 90 |
佐藤 | 80 |
鈴木 | 85 |
このテーブルに対してROW_NUMBER()関数を適用すると、次のような結果になります。
名前 | 得点 | ランキング |
---|---|---|
田中 | 90 | 1 |
鈴木 | 85 | 2 |
佐藤 | 80 | 3 |
ウィンドウ関数を使った集計
SUM()によるウィンドウ内の合計
SUM()関数もウィンドウ関数として使用することで、特定の範囲内での合計を計算することができます。
SELECT department, salary,
SUM(salary) OVER (PARTITION BY department) AS total_salary
FROM employees;
具体的な例
以下のテーブルがあるとします。
部門 | 給与 |
---|---|
開発 | 300万 |
開発 | 400万 |
営業 | 250万 |
このテーブルに対してSUM()ウィンドウ関数を適用すると、次のような結果になります。
部門 | 給与 | 部門内合計給与 |
---|---|---|
開発 | 300万 | 700万 |
開発 | 400万 | 700万 |
営業 | 250万 | 250万 |
まとめ
SQLのウィンドウ関数は、データの集計やランキングに非常に強力なツールです。特に、大量のデータを効率よく処理する必要がある場合や、高度なデータ分析を行いたい場合には欠かせない機能と言えるでしょう。
created by Rinker
¥4,554
(2024/11/22 10:55:01時点 Amazon調べ-詳細)
コメント