GROUP BY の集計でキー全体の計算結果を含めてすべての組み合わせを計算したい - GROUP BY CUBE 演算子の利用 - SQL

GROUP BY の集計でキー全体の計算結果を含めてすべての組み合わせを計算する場合のSQLについて紹介します。

概要

GROUP BYを利用すると、レコードの値に応じてグルーピングして集計ができます。また、複数のキーでグルーピングした場合、片方のキーがすべての場合を含みたい場合や、全体の計算結果を求めたい場合は、GROUP BY ROLLUP を利用した計算できます。GROUP BY ROLLUPでは選択した列の値の階層の集計を示す結果になるため、すべての組み合わせを計算しません。この記事ではすべての組み合わせで計算するSQLを紹介します。

書式

すべての組み合わせを計算して集計する場合には "GROUP BY CUBE" 演算子を利用します。
select (列名) from (デーブル名) group by (キー列名) with cube

テーブル

下記のテーブルを用意します。
ProductsB テーブル
idmodelnameclasscategoryprice
1C-XM01モーダンチェアホームチェア56000
2X-XD05ラージデスクオフィステーブル87000
3A-DA40ラウンドダイニングチェアホームチェア28000
4O-XX100ナチュラルオフィスオフィスチェア13800
5R-D400ラウンドダイニングテーブルホームテーブル128000
6R7000ウッドキャビネットオフィスその他32000
7B-200リネンベッドホームベッド184500
8B-250ホワイトダブルベッドホームベッド324850
9W-80ワーキングチェアオフィスチェア45000
10EG-10Xエルゴノミクスデスクオフィステーブル88500

GROUP BY CUBEの例

すべての組み合わせの合計値を計算結果に含める場合には、下記のSQLを実行します。

SQL文

  select category,class, sum(price) from ProductsB GROUP BY class, category with cube

結果

下記の結果が返ります。
categoryclass(列名なし)
その他オフィス32000
その他NULL32000
チェアオフィス58800
チェアホーム84000
チェアNULL142800
テーブルオフィス175500
テーブルホーム128000
テーブルNULL303500
ベッドホーム509350
ベッドNULL509350
NULLNULL987650
NULLオフィス266300
NULLホーム721350
"NULL"が表示されている場所が全体の計算結果となります。classの"オフィス"全体の金額の合計値、"ホーム"全体の金額の合計値、に加え、、Categoryの"チェア" "テーブル" "ベッド" "その他"の合計値と、全体の金額の合計値が計算結果に含まれています。

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-03-26
作成日: 2017-07-22
iPentec all rights reserverd.