ウィンドウ関数 レッスン6
SUM() OVER
累積合計・移動合計をSUM() OVERで計算する方法を学びます。
集約関数のウィンドウ利用
SUM・AVG・COUNT・MIN・MAXなどの集約関数もOVER句を付けることで ウィンドウ関数として使えます。 行を集約せずに各行に計算結果を付与できるため、 累積合計(running total)や移動平均(moving average)の計算が簡単になります。
SUM(col) OVER (ORDER BY date)— 累積合計AVG(col) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)— 3行移動平均SUM(col) OVER ()— 全体合計(ORDER BYなし)
例1: 累積売上を計算する
テーブル定義
CREATE TABLE monthly_sales (
month TEXT PRIMARY KEY,
sales INTEGER NOT NULL
);
INSERT INTO monthly_sales VALUES ('2024-01', 100000);
INSERT INTO monthly_sales VALUES ('2024-02', 120000);
INSERT INTO monthly_sales VALUES ('2024-03', 95000);
INSERT INTO monthly_sales VALUES ('2024-04', 130000);
INSERT INTO monthly_sales VALUES ('2024-05', 115000);SQLエディタ
例2: 移動平均の計算
テーブル定義
CREATE TABLE daily_temp (
day TEXT PRIMARY KEY,
temperature REAL NOT NULL
);
INSERT INTO daily_temp VALUES ('2024-01-01', 5.2);
INSERT INTO daily_temp VALUES ('2024-01-02', 3.8);
INSERT INTO daily_temp VALUES ('2024-01-03', 7.1);
INSERT INTO daily_temp VALUES ('2024-01-04', 6.5);
INSERT INTO daily_temp VALUES ('2024-01-05', 8.3);
INSERT INTO daily_temp VALUES ('2024-01-06', 4.9);SQLエディタ
例3: 全体合計に対する割合
テーブル定義
CREATE TABLE category_revenue (
category TEXT PRIMARY KEY,
revenue INTEGER NOT NULL
);
INSERT INTO category_revenue VALUES ('食品', 450000);
INSERT INTO category_revenue VALUES ('衣料', 320000);
INSERT INTO category_revenue VALUES ('家電', 280000);
INSERT INTO category_revenue VALUES ('雑貨', 150000);SQLエディタ