SQLのSUM関数で、集計する条件の指定方法を調べたのでメモしておきます。
集計条件の指定方法
書き方は以下の通りです。
SELECT
SUM(CASE WHEN flag = 1 THEN 1 ELSE 0 END)
FROM
table名
SUM関数の中で CASE文を使うことで、条件に一致するデータだけを集計することが出来ます。
サンプル
売上テーブルを作って、プロジェクトごとの売上額と、当月時点の売上を集計するサンプルです。
CREATE TABLE `売上` (
`id` int NOT NULL AUTO_INCREMENT,
`プロジェクトID` varchar(3) NOT NULL,
`計上年月日` date NOT NULL,
`金額` decimal(11,2) NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
データを用意します。
- プロジェクト001は、1月〜6月まで毎月100,000円を売上
- プロジェクト002は、3月〜4月まで毎月50,000円を売上
INSERT INTO `売上` VALUES (1, '001', '2022-01-31', 100000);
INSERT INTO `売上` VALUES (2, '001', '2022-02-28', 100000);
INSERT INTO `売上` VALUES (3, '001', '2022-03-31', 100000);
INSERT INTO `売上` VALUES (4, '001', '2022-04-30', 100000);
INSERT INTO `売上` VALUES (5, '001', '2022-05-31', 100000);
INSERT INTO `売上` VALUES (6, '001', '2022-06-30', 100000);
INSERT INTO `売上` VALUES (7, '002', '2022-03-31', 50000);
INSERT INTO `売上` VALUES (8, '002', '2022-04-30', 50000);
プロジェクトごとの売上額と、4月末までの売上を集計してみます。
売上額は単純にSUM(金額)で集計します。
当月時点の売上は、計上月が4月までの金額を合計したいので、SUM(CASE WHEN)
を使って集計条件を指定します。
SELECT
`プロジェクトID`,
SUM(`金額`) AS `売上額`,
SUM(CASE WHEN `計上年月日` <= '2022-04-30' THEN `金額` ELSE 0 END) AS `4月時点売上`
FROM `売上`
GROUP BY `プロジェクトID`;
SQLを実行すると、次のような結果になります。
プロジェクトID 売上額 4月時点売上
001 600000 400000
002 100000 100000
コメント