IT Learning

実践形式でITのお勉強

PostgreSQL

PostgreSQL 累積値を計算するSQL

投稿日:

目的

ある値の累積値を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でソートしておくことです。

Related

-PostgreSQL

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です