【ROLLUP句】【GROUPING関数】グループ毎の集計結果へ「合計」列を追加する

以下のような単純なテーブルを、

グループ毎(商品名と年月)に集計し、

その集計結果へ「合計」列を追加することが出来ます!

集計結果へ「合計」列を追加するために、この記事では以下を
使用します!
・ROLLUP句
・GROUPING関数

ROLLUP句、GROUPING関数とは

どちらも標準SQLに含まれているモノです。
よってSQL Serverを含む全てのRDBMSで使用可能です。

これらを使用することで、グループ毎の集計結果へ「合計」列を追加することができます。

準備

以下のSQLを実行し、テーブルの作成/データの登録をします。

--テーブルの作成
CREATE TABLE sales
(
	id CHAR(3)  PRIMARY KEY,
	productName VARCHAR(16),
	price       INTEGER NOT NULL,
	saleDate    DATE NOT NULL,
)

--データの登録
INSERT INTO sales VALUES('001','すいか','10','2020-01-01')
INSERT INTO sales VALUES('002','すいか','20','2020-01-02')
INSERT INTO sales VALUES('003','すいか','30','2020-01-03')
INSERT INTO sales VALUES('004','めろん','40','2020-01-04')
INSERT INTO sales VALUES('005','めろん','50','2020-01-05')
INSERT INTO sales VALUES('006','めろん','60','2020-01-06')
INSERT INTO sales VALUES('007','すいか','70','2020-02-01')
INSERT INTO sales VALUES('008','すいか','80','2020-02-02')
INSERT INTO sales VALUES('009','すいか','90','2020-02-03')
INSERT INTO sales VALUES('010','めろん','100','2020-02-04')
INSERT INTO sales VALUES('011','めろん','110','2020-02-05')
INSERT INTO sales VALUES('012','すいか','120','2021-01-01')
INSERT INTO sales VALUES('013','すいか','130','2021-01-02')
INSERT INTO sales VALUES('014','めろん','140','2021-01-03')
INSERT INTO sales VALUES('015','めろん','150','2021-01-04')

SQL実行

ここでは
 ・商品毎と年月毎でグルーピングし売上を集計
 ・集計結果へ「合計」列を追加
します。

SELECT
	CASE
		WHEN GROUPING(productName) = 1 THEN FORMAT(saleDate,'yyyy/MM') + '年の合計' ELSE productName
	END AS '商品名/合計',
	CASE
		WHEN GROUPING(productName) = 1 THEN '-' ELSE FORMAT(saleDate,'yyyy/MM') 
	END AS '年月',
	sum(price) AS '売上合計'
FROM sales
GROUP BY 
	ROLLUP(productName),
	FORMAT(saleDate,'yyyy/MM')
ORDER BY 
	FORMAT(saleDate,'yyyy/MM'),
	productName

結果

「合計」列が追加されたことを確認します。

タイトルとURLをコピーしました