2019/09/11

[SQL] ウィンドウ関数で累積和を計算する方法

id date profit
0 2019-03-01 1000
1 2019-03-04 500
2 2019-04-05 -300
3 2019-05-01 100

上記 table1 から profit の累積和(cumlative_profit)を求める QUERY は以下1

1
2
3
4
5
SELECT *,
       SUM(profit) OVER W AS cumulative_profit
FROM   table1
WINDOW W AS (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
ORDER BY date;

これは、以下のように書いたのと同等。

1
2
3
4
SELECT *,
       SUM(profit) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_profit
FROM   table1
ORDER BY date;

最近読み終わったのだけど、SQL に関しては以下の本が秀逸。 もちろん、ウィンドウ関数の使い方もとてもわかりやすく書いてある。 お勧め。

  1. 私は MariaDB 10.3.10 で動作確認しましたが、「達人に学ぶSQL徹底指南書 第2版」によると、主要なDMBSで動作するとのこと。 
?