SQL Server 2008/2012/2014/2016/2017/2019で累積合計を計算する方法【初心者向け】
SQL Server で累積合計を取得する方法
SUM
関数と OVER
句を組み合わせることで、累積合計を簡単に計算できます。
SELECT
日付,
売上数,
SUM(売上数) OVER (ORDER BY 日付) AS 売上数累計
FROM 売上テーブル;
上記の例では、売上テーブル
の 売上数
列の累積合計を 売上数累計
列として計算しています。
サブクエリを使う方法でも累積合計を計算できます。
SELECT
日付,
売上数,
(
SELECT SUM(売上数)
FROM 売上テーブル AS t
WHERE t.日付 <= s.日付
) AS 売上数累計
FROM 売上テーブル AS s;
- 简单的な累積合計を計算する場合:
SUM
関数とOVER
句を使う方法の方が簡単です。 - より複雑な累積合計を計算する場合: サブクエリを使う方法の方が柔軟性があります。
上記以外にも、累積合計を計算するには、CTE (Common Table Expressions) や窓関数を使う方法などがあります。
-- テーブル作成
CREATE TABLE 売上テーブル (
日付 DATE,
売上数 INT
);
-- データ挿入
INSERT INTO 売上テーブル (日付, 売上数) VALUES ('2023-01-01', 100);
INSERT INTO 売上テーブル (日付, 売上数) VALUES ('2023-01-02', 200);
INSERT INTO 売上テーブル (日付, 売上数) VALUES ('2023-01-03', 300);
-- 累積合計を計算
SELECT
日付,
売上数,
SUM(売上数) OVER (ORDER BY 日付) AS 売上数累計
FROM 売上テーブル;
-- 結果
日付 | 売上数 | 売上数累計
------- | -------- | --------
2023-01-01 | 100 | 100
2023-01-02 | 200 | 300
2023-01-03 | 300 | 600
上記のサンプルコードを実行すると、以下の結果が出力されます。
日付 | 売上数 | 売上数累計
------- | -------- | --------
2023-01-01 | 100 | 100
2023-01-02 | 200 | 300
2023-01-03 | 300 | 600
売上数累計
列には、各行の日付までの累積合計が表示されています。
累積合計を取得する他の方法
CTE を使うことで、複雑な累積合計を計算することができます。
WITH 累積合計テーブル AS (
SELECT
日付,
売上数,
SUM(売上数) OVER (ORDER BY 日付) AS 売上数累計
FROM 売上テーブル
)
SELECT
日付,
売上数,
売上数累計
FROM 累積合計テーブル;
上記の例では、CTE を使って 累積合計テーブル
を作成し、そのテーブルから累積合計を取得しています。
窓関数を使う
SQL Server 2012 以降では、窓関数を使って累積合計を計算することができます。
SELECT
日付,
売上数,
SUM(売上数) OVER (ORDER BY 日付 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 売上数累計
FROM 売上テーブル;
上記の例では、SUM
関数と ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
オプションを使って、累積合計を計算しています。
sql-server sql-server-2008