ウィンドウ関数 レッスン7
PARTITION BY
PARTITION BYでウィンドウをグループに分割する応用パターンを学びます。
PARTITION BYの役割
PARTITION BYはウィンドウ関数のOVER句内で使い、 計算対象の行をグループに分割します。 GROUP BYはグループを1行に集約しますが、PARTITION BYは行を集約せずにグループごとに計算します。 各グループ内で独立した順位付けや累積計算が可能です。
- PARTITION BYを省略すると全行が1つのウィンドウになる
- 複数カラムで分割可能:
PARTITION BY dept, year - PARTITION BYとORDER BYを組み合わせてグループ内ランキングを実現
例1: 部門別の順位付けと全体順位の比較
テーブル定義
CREATE TABLE employees ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, department TEXT NOT NULL, salary INTEGER NOT NULL ); INSERT INTO employees VALUES (1, '田中太郎', '営業部', 400000); INSERT INTO employees VALUES (2, '鈴木花子', '開発部', 520000); INSERT INTO employees VALUES (3, '佐藤一郎', '営業部', 450000); INSERT INTO employees VALUES (4, '山田二郎', '開発部', 480000); INSERT INTO employees VALUES (5, '伊藤花代', '人事部', 360000); INSERT INTO employees VALUES (6, '渡辺次郎', '開発部', 500000);
SQLエディタ
例2: 部門別累積合計と部門内シェア
テーブル定義
CREATE TABLE sales_data ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, department TEXT NOT NULL, sales INTEGER NOT NULL ); INSERT INTO sales_data VALUES (1, '田中太郎', '東日本', 500000); INSERT INTO sales_data VALUES (2, '鈴木花子', '東日本', 300000); INSERT INTO sales_data VALUES (3, '佐藤一郎', '東日本', 200000); INSERT INTO sales_data VALUES (4, '山田二郎', '西日本', 450000); INSERT INTO sales_data VALUES (5, '伊藤花代', '西日本', 380000);
SQLエディタ
例3: 複数カラムによるパーティション
テーブル定義
CREATE TABLE quarterly_revenue ( id INTEGER PRIMARY KEY, year INTEGER NOT NULL, quarter INTEGER NOT NULL, region TEXT NOT NULL, revenue INTEGER NOT NULL ); INSERT INTO quarterly_revenue VALUES (1, 2024, 1, '東京', 200000); INSERT INTO quarterly_revenue VALUES (2, 2024, 2, '東京', 250000); INSERT INTO quarterly_revenue VALUES (3, 2024, 1, '大阪', 180000); INSERT INTO quarterly_revenue VALUES (4, 2024, 2, '大阪', 220000);
SQLエディタ