IBMi海外記事2015.08.26
ロールアップする2つの方法
Ted Holt 著
Three Powerful SQL Words では、グループ化列のサブセット上で集合値を持つ要約照会を機能強化する方法をお見せしました。今日は、2 つのロールアップ構文を紹介して、その違いを図示しながらディスカッションを続けたいと思います。
まず、会計取引の表があるとします。

お馴染みの GROUP BY 節を使った一般的な要約照会を以下に示します。

amount 列は2つの列 department と account でまとめています。
集合の合計を追加するのは簡単で、WITH ROLLUP を追加するだけです。

これで、部門の合計と総計が計算されます。
同じ内容を実行する、別の形式のロールアップを以下に示します。

これが別の形式と同じぐらい良い形式ですか?
以下の照会を考えてみましょう。

アカウントの集合はありますが、部門の集合はない点に注意してください。
別のパターンを以下に示します。

department の集合の数字はありますが、account の数字はありません。
最後の例を考えてみましょう。

department 別の合計、account 別の合計、および総計があります。これは WITH CUBE と同等です。
GROUP BY ROLLUP と WITH ROLLUP のどの形式が良いでしょうか? おそらく、以下の 2 つの理由で GROUP BY ROLLUP でしょう。
- 私が言えることは、GROUP BY ROLLUP の方が WITH ROLLUP より標準的で、リレーショナル データベースの世界全体で良く知られているようです。
- GROUP BY ROLLUP 構文により、WITH ROLLUP ではできない結果セットを生成できます。
こうした理由から、もっと時間をかけて GROUP BY ROLLUP 構文のニュアンスをマスターしようと思っています。