🗃️SQLLearn
ウィンドウ関数 レッスン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エディタ