目的
ある値の累積値をSQLで計算する。
Step1 : テーブル用意
以下のようなテーブルを用意します。
CREATE TABLE test_accumulation( 年 int ,月 int ,値 int )
この年、月、値というカラムにそれぞれ、以下のようなテストデータを入れます。
年 | 月 | 値 ------+----+---- 2019 | 4 | 5 2019 | 5 | 13 2019 | 6 | 5 2019 | 7 | 9 2019 | 8 | 15 2019 | 9 | 24 2019 | 10 | 5 2019 | 11 | 32 2019 | 12 | 9 2020 | 1 | 13 2020 | 2 | 24 2020 | 3 | 19 (12 行)
Step2 : 累積値を計算するSQL
上記の値の横に、その年、月までの累積値が計算されたカラムを追加します。これはOVER句を使用した以下のようなSQLで簡単に実現可能です。
SELECT 年 ,月 ,値 ,SUM(値) OVER(ORDER BY 年,月) AS 累積値 FROM test_accumulation
結果
年 | 月 | 値 | 累積値 ------+----+----+-------- 2019 | 4 | 5 | 5 2019 | 5 | 13 | 18 2019 | 6 | 5 | 23 2019 | 7 | 9 | 32 2019 | 8 | 15 | 47 2019 | 9 | 24 | 71 2019 | 10 | 5 | 76 2019 | 11 | 32 | 108 2019 | 12 | 9 | 117 2020 | 1 | 13 | 130 2020 | 2 | 24 | 154 2020 | 3 | 19 | 173
OVER句を使うことで、該当する行までの間がSUMされるので、結果として累積値が得られます。ポイントとしては、累積値を求める問題の場合、順番が重要になることが多いはずですので、OVER句内にORDER BYでソートしておくことです。