MySQL8.0でGROUPING演算子について調べてみた

プログラミング
アイキャッチ
スポンサーリンク

MySQL8.0でGROUPING演算子について(ROLLUP,CUBE,GROUPING SETS)

スポンサーリンク

はじめに

GROUPING演算子は3種類ある。
これらについてまとめる。

  • ROLLUP
  • CUBE
  • GROUPING SETS
スポンサーリンク

使用するテーブル情報

テーブル作成

CREATE TABLE docker.shohin (id serial,category text,created_at datetime, price int , PRIMARY KEY (id));

データ挿入

INSERT INTO shohin (category , created_at,price) VALUES ('まんが' , '2021-09-21 00:00:00',100);
INSERT INTO shohin (category , created_at,price) VALUES ('まんが' , '2021-09-21 00:00:00',200);
INSERT INTO shohin (category , created_at,price) VALUES ('まんが' , '2021-09-21 00:00:00',300);
INSERT INTO shohin (category , created_at,price) VALUES ('雑誌' , '2021-09-21 00:00:00',400);
INSERT INTO shohin (category , created_at,price) VALUES ('雑誌' , '2021-09-21 00:00:00',500);
INSERT INTO shohin (category , created_at,price) VALUES ('新聞' , '2021-09-21 00:00:00',600);
INSERT INTO shohin (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)
)
スポンサーリンク

おわりに

実務で使用することはあまりないかもしれませんが、
存在すら知らなかったので、良い機会になりました。

コメント

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