この記事では、SQLでよく用いられる高度な集約技術、ROLLUP, CUBE, およびGROUPING SETSと基本的な集約関数の組み合わせについて解説します。これらの技術はデータ分析において非常に役立つもので、データベースから多角的な視点で情報を抽出する際に重宝します。
基本的な集約関数について
SQLには、COUNT(), SUM(), AVG(), MIN(), MAX()など、基本的な集約関数がいくつかあります。これらの関数は、GROUP BY句と共に使うことで、特定のカラムに基づいた集約が可能です。
COUNT() – レコード数をカウントします。
SUM() – 指定したカラムの合計値を求めます。
AVG() – 指定したカラムの平均値を求めます。
MIN() – 指定したカラムの最小値を求めます。
MAX() – 指定したカラムの最大値を求めます。
ROLLUPによる階層的な集約
ROLLUPは、GROUP BY句と共に用いられ、指定したカラムの組み合わせに対する集約結果とサブトータルを一度のクエリで取得できます。
基本的なROLLUPの使い方
例えば、都道府県と市区町村ごとの売上データがあるとき、ROLLUPを使うと以下のように集約できます。
SELECT 都道府県, 市区町村, SUM(売上)
FROM 売上データ
GROUP BY ROLLUP (都道府県, 市区町村);
出力結果
都道府県 |
市区町村 |
合計売上 |
東京 |
渋谷 |
2000 |
東京 |
新宿 |
3000 |
東京 |
null |
5000 |
null |
null |
5000 |
テーブル名称1: ROLLUPによる集約結果
CUBEによる多次元的な集約
CUBEは、ROLLUPの拡張版と考えることができます。すべての組み合わせに対する集約結果を取得するために使用されます。
基本的なCUBEの使い方
基本的なCUBEの使用方法は以下の通りです。
SELECT 都道府県, 市区町村, SUM(売上)
FROM 売上データ
GROUP BY CUBE (都道府県, 市区町村);
出力結果
都道府県 |
市区町村 |
合計売上 |
東京 |
渋谷 |
2000 |
東京 |
新宿 |
3000 |
東京 |
null |
5000 |
null |
渋谷 |
2000 |
null |
新宿 |
3000 |
null |
null |
5000 |
テーブル名称2: CUBEによる集約結果
GROUPING SETSで複雑な集約
GROUPING SETSは、ROLLUPやCUBEとは異なり、特定の集約結果だけを取得することができます。
基本的なGROUPING SETSの使い方
GROUPING SETSの使用方法は以下の通りです。
SELECT 都道府県, 市区町村, SUM(売上)
FROM 売上データ
GROUP BY GROUPING SETS ((都道府県, 市区町村), (都道府県), ());
出力結果
都道府県 |
市区町村 |
合計売上 |
東京 |
渋谷 |
2000 |
東京 |
新宿 |
3000 |
東京 |
null |
5000 |
null |
null |
5000 |
テーブル名称3: GROUPING SETSによる集約結果
まとめ
この記事では、SQLの高度な集約オプションであるROLLUP, CUBE, およびGROUPING SETSについて詳しく解説しました。これらの技術を駆使することで、データ分析がより効率的に、かつ多角的に行えます。特に大量のデータを扱う場合や複数の角度からデータを考察したい場合には、これらの機能は非常に役立ちます。
コメント