2021.08.31
【SQL基礎】ROLLUPを使ってみる
本項からはGROUPING演算子を実際に使用して解説していきます。
ROLLUPを使ってみる
今回は、以下のテーブルを使用してROLLUPの動きを見ていきます。
まずは比較の為、GROUP BYで商品ごとの合計金額を表示してみましょう。
SELECT name, sum(price) FROM sales GROUP BY name;
ここにROLLUPを使用すると以下のように全体の合計金額の行(超集合行)が追加されます。
SELECT name, sum(price) FROM sales GROUP BY name WITH ROLLUP;
一番最後に全体の合計金額が追加されたことが確認できたかと思います。
超集合行では、表示する値が不明な列ができてしまうので、その部分はNULLが表示されます。
また、GROUP BY句で複数の列を指定した場合は、もう少し複雑な処理となります。
まずは、同じようにGROUP BYのみで見てみましょう。
SELECT name, date, sum(price) FROM sales GROUP BY name, date;
同じように、ROLLUPを使用すると以下のようになります。
SELECT name, date, sum(price) FROM sales GROUP BY name, date WITH ROLLUP;
最終行の全体の合計だけでなく、商品ごとの小計金額も追加されていることが確認できます。
このように、GROUP BYで指定する列が増えるごとに追加される小計の列が増えていきます。
例えば、col1、col2、col3としていた場合は、col1とcol2の小計、col1の小計といった具合に、指定した列の右側から一つずつ除外していった組み合わせの小計が追加されます。
今回の学習ポイント
・超集合行では、集約された列はNULL表記になる
・GROUP BYで複数列を指定すると全体合計以外にも各小計行も追加される
練習問題
問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。 [sql] CREATE DATABASE worldcup2014;
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。 [sql] CREATE DATABASE worldcup2014;
use worldcup2014
source C:\worldcup2014.sql
[/sql]