MySQL8.0でGROUPING演算子について(ROLLUP,CUBE,GROUPING SETS)
はじめに
GROUPING演算子は3種類ある。
これらについてまとめる。
- ROLLUP
- CUBE
- GROUPING SETS
使用するテーブル情報
テーブル作成
CREATE TABLEdocker
.shohin
(id
serial,category
text,created_at
datetime,price
int , PRIMARY KEY (id));
データ挿入
INSERT INTOshohin
(category
,created_at
,price
) VALUES ('まんが' , '2021-09-21 00:00:00',100); INSERT INTOshohin
(category
,created_at
,price
) VALUES ('まんが' , '2021-09-21 00:00:00',200); INSERT INTOshohin
(category
,created_at
,price
) VALUES ('まんが' , '2021-09-21 00:00:00',300); INSERT INTOshohin
(category
,created_at
,price
) VALUES ('雑誌' , '2021-09-21 00:00:00',400); INSERT INTOshohin
(category
,created_at
,price
) VALUES ('雑誌' , '2021-09-21 00:00:00',500); INSERT INTOshohin
(category
,created_at
,price
) VALUES ('新聞' , '2021-09-21 00:00:00',600); INSERT INTOshohin
(category
,created_at
,price
) VALUES ('新聞' , '2021-09-21 00:00:00',700);
id | category | created_at | price |
---|---|---|---|
1 | まんが | 2021-09-21 00:00:00 | 100 |
2 | まんが | 2021-09-21 00:00:00 | 200 |
3 | まんが | 2021-09-21 00:00:00 | 300 |
4 | 雑誌 | 2021-09-21 00:00:00 | 400 |
5 | 雑誌 | 2021-09-21 00:00:00 | 500 |
6 | 新聞 | 2021-09-21 00:00:00 | 600 |
7 | 新聞 | 2021-09-21 00:00:00 | 700 |
ROLLUP
SELECT category , SUM(price) AS '合計' FROM shohin GROUP BY category WITH ROLLUP ORDER BY category ;
category | 合計 |
---|---|
2800 | |
まんが | 600 |
新聞 | 1300 |
雑誌 | 900 |
categoryごとの合計と全体の合計が出力されています。
CUBE
MySQLでは使用できませんが、サンプルだけ記載しておきます。
生成される結果としては、ROLLUPに似ていますが、クロス集計の行を追加することになります。
SELECT category , SUM(price) AS '合計' FROM shohin GROUP BY CUBE(category,created_at) ORDER BY category,created_at ;
GROUPING SETS
こちらもMySQLでは使用できません。サンプル記載しておきます。
生成される結果としては、categoryとcreated_atごとの合計値が出力されます。
SELECT category,created_at,SUM(price) AS '合計' FROM shohin group by grouping sets( (category), (created_at) )
おわりに
実務で使用することはあまりないかもしれませんが、
存在すら知らなかったので、良い機会になりました。
コメント