ウィンドウ関数 レッスン8
フレーム句
ROWS/RANGE BETWEENでウィンドウのフレーム範囲を細かく制御する方法を学びます。
フレーム句とは
フレーム句はOVER句の中で、各行の計算に使う行範囲(フレーム)を指定します。ROWS BETWEENは行数で範囲を指定し、RANGE BETWEENは値の範囲で指定します。 移動平均や移動合計の窓幅を制御する際に使います。
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW— 先頭から現在行(累積)ROWS BETWEEN 2 PRECEDING AND CURRENT ROW— 2行前から現在行(3行窓)ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING— 現在行から末尾ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING— 全行
例1: 累積合計 vs 移動合計
テーブル定義
CREATE TABLE daily_sales (
day TEXT PRIMARY KEY,
sales INTEGER NOT NULL
);
INSERT INTO daily_sales VALUES ('2024-01-01', 10000);
INSERT INTO daily_sales VALUES ('2024-01-02', 15000);
INSERT INTO daily_sales VALUES ('2024-01-03', 12000);
INSERT INTO daily_sales VALUES ('2024-01-04', 18000);
INSERT INTO daily_sales VALUES ('2024-01-05', 14000);SQLエディタ
例2: 前後の行を含むフレーム
テーブル定義
CREATE TABLE daily_temp (
day TEXT PRIMARY KEY,
temperature REAL NOT NULL
);
INSERT INTO daily_temp VALUES ('2024-01-01', 5.0);
INSERT INTO daily_temp VALUES ('2024-01-02', 8.0);
INSERT INTO daily_temp VALUES ('2024-01-03', 3.0);
INSERT INTO daily_temp VALUES ('2024-01-04', 10.0);
INSERT INTO daily_temp VALUES ('2024-01-05', 7.0);SQLエディタ
例3: 末尾からの逆累積
テーブル定義
CREATE TABLE monthly_revenue (
month TEXT PRIMARY KEY,
revenue INTEGER NOT NULL
);
INSERT INTO monthly_revenue VALUES ('2024-01', 100000);
INSERT INTO monthly_revenue VALUES ('2024-02', 120000);
INSERT INTO monthly_revenue VALUES ('2024-03', 90000);
INSERT INTO monthly_revenue VALUES ('2024-04', 110000);SQLエディタ