SQLデータをソート、グループ化、要約化するための10 Tips
翻訳校正:原井彰弘
データを分析するためにどのようなSQLを構築すればよいか、10個のTipsを紹介する。
#7:集約によってグループを要約化する
データのグループ化によってデータの分析は行いやすくなるが、ときには単なるグループそのもの以外の情報をもう少し欲しいこともあるだろう。集約関数を追加すると、グループ化されたデータをさらに要約化することが可能になる。たとえば、以下のステートメントではそれぞれの注文について小計を表示する。
SELECT OrderID, Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP BY OrderID
ほかのグループと同様に、SELECTとGROUP BYのリストは一致させなければならない。ただし、SELECTで集約を行う場合だけは、ルールの例外なのである。
#8:集約されたデータを要約化する
それぞれのグループについて小計を表示することで、さらに要約化を行うことが可能である。SQLのROLLUP演算子を用いると、レコードが一つ余分に表示され、それぞれのグループに関する小計がそこに出力される。余分に表示されたレコードは、集約関数を用いてそれぞれのグループに含まれているレコードをすべて評価した結果となる。以下のステートメントでは、それぞれのグループについて合計を行い、OrderTotalカラムに出力している。
SELECT Customer, OrderNumber, Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH ROLLUP
たとえば、あるグループが2つの行からなっており、それぞれのOrderTotalの値が20、25だとすると、ROLLUPの行にはOrderTotalとして45が表示される。ROLLUPの結果に含まれる最初のレコードは、すべてのグループのレコードが評価されるためユニークな値となる。その値は、レコードセット全体の総計なのだ。
ROLLUPでは、集約関数内でのDISTINCTの使用や、GROUP BY ALL節の使用はサポートされていない。
#9:それぞれのカラムを要約化する
CUBE演算子はROLLUPよりもさらに一歩進んでおり、それぞれのグループに含まれているそれぞれの値の合計値を返すことができる。CUBEの結果はROLLUPと似ているが、CUBEではグループ内のそれぞれのカラムにレコードが追加されるのである。以下のステートメントでは、それぞれのグループの小計と共に、それぞれの顧客ごとの合計を追加で表示する。
SELECT Customer, OrderNumber, Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH CUBE
CUBEでは最も総合的な要約化がなされる。CUBEは集約とROLLUPの役割を果たすだけでなく、グループを定義する他のカラムも評価するのである。つまり、CUBEは可能なカラムの組み合わせすべてを要約化するのだ。
CUBEでは、GROUP BY ALLはサポートされていない。
#10:要約に順番を定める
(普通そうなのだが)CUBEを使用した結果が混乱を招くようであれば、次のようにGROUPING関数を追加するとよい。
SELECT GROUPING(Customer), OrderNumber, Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH CUBE
GROUPING関数を追加すると、結果のレコードそれぞれに2値のカラムが追加される。
- 値が1の場合は、左側の値が要約値である、つまりROLLUPもしくはCUBE演算子を使用した結果である、ということを示す。
- 値が0の場合は、左側の値がオリジナルのGROUP BY節で作成された詳細を表すレコードだということを示す。
- 6人の推薦記事
- 1人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(5)
- 昨日のトップ記事
- 3日前
- 4日前
- 5日前
- 6日前
- ホワイトペーパー
- 読者投票
- 話題のタグ
フォトレポート:世界各国の優秀な技術者がパリに集結--Imagine Cup 2008世界大会
バッチ処理でデータベース活用:4つの課題と5つの解決ポイント
Rubyでどう書く?:RubyでWord文書を作成する
Adobe Acrobat 9--音声やクイズを埋め込んでeラーニング
ウェブ制作者が仲間と幸せに仕事をする方法:仲間との出会い
Excelで多用する雑多な操作を素早く片付けるための10のティップス(前編)
開発者のFirefox 3:非互換のアドオンをインストール
「未来の、その先」をどう提言していくか
今知るべき仮想化情報
DELL連載第4回〜「Microsoft System Center」
Techno Exchange
ZDNet Japan Green IT