SQLデータをソート、グループ化、要約化するための10 Tips
翻訳校正:原井彰弘
データを分析するためにどのようなSQLを構築すればよいか、10個のTipsを紹介する。
分析可能なSQLデータを整えるには、SQL言語の中でも特定の節や演算子の使い方を理解する必要がある。本稿で紹介するTipsでは、望む結果を得るためにはどのようにステートメントを構築すればよいかということを紹介する。
適切な意味を持つようにデータを整えるのはだ。ときには、単純にソートを行うだけでよい場合もある。また、ときにはグループ化を行って分析、要約化する必要がある場合もある。幸い、SQLでは多数の節や演算子が提供されているため、それらを用いてソートやグループ化、要約化を行うことが可能だ。以下に述べるTipsを読めば、いつソートを行うべきか、いつグループ化するべきか、そしていつどのように要約化するべきかが、明確に理解できるようになるだろう。それぞれの節と演算子に関するより詳しい情報はBooks Onlineを参照して欲しい。
#1:ソートによって順番を定める
たいていの場合、データにとって本当に必要なのは順序くらいである。SQLのORDER BY節を用いると、データをアルファベット順もしくは番号順に整理することが可能だ。ソートを行うと、同じ値はグループのようになって同じ場所にソートされるわけだが、その一見グループのように見えるものは単なるソート結果であり、本物のグループではない。ORDER BYではそれぞれのレコードを表示するが、グループは一般に複数のレコードを表すものなのである。
#2:グループ化によって同じ値を除去する
ソートとグループ化の大きな違いは、ソートが(表示レコード数の制限がある場合はその中で)すべてのレコードを表示する一方、グループ化ではすべてのレコードは表示されないということである。GROUP BY節では、同じ値は一つのレコードにまとめられるのだ。以下の例では、GROUP BY節を用いることによって、複数の同じZIPコード(郵便番号)が含まれているテーブルから、重複を取り除いたリストを返している。
SELECT ZIP FROM Customers GROUP BY ZIP
GROUP BYとSELECTのカラムリストには、グループを定義したカラムのみを含めなければならない。つまり、SELECTのリストとGROUP BYのリストは一致させる必要があるのだ。ただし、それには一つ例外があり、SELECTのリストには集約関数を含めることが可能である(GROUP BYでは集約関数は使用できない)。
もう一つ、GROUP BYでは結果のソートは行わないことに注意しておく必要がある。グループをアルファベット順もしくは番号順に並び替えるには、ORDER BY節(#1)を追加する必要がある。また、GROUP BY節ではカラムの別名を参照することはできない。グループ化を行うカラムは、データに含まれているものでなければならないのだ。ただし、結果に関してはそのカラムが含まれていなくても構わない。
#3:グループ化の前にデータを限定する
WHERE節を用いることによって、GROUP BYでグループ化を行うデータを限定することが可能だ。たとえば、以下のステートメントではケンタッキー州の顧客のみを対象として、ユニークなZIPコードをリストとして返している。
SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ZIP
ここで重要なのは、WHEREのフィルターはGROUP BY節が評価される前に適用されるということである。
GROUP BYと同様に、WHEREも集約関数をサポートしていない。
- 6人の推薦記事
- 1人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(5)
- 今日のトップ記事
- 昨日
- 3日前
- 4日前
- 5日前
- 7日前
- ホワイトペーパー
- 話題のタグ
仮想化Java環境のスループットを2倍に--BEA LiquidVMの適応型メモリ管理
Firefox 3が対応したdisplayプロパティの値(3) - inline-table
MSもアドビも学生さんに開発ソフトを無償提供
「Economist」のトップページがリニューアル
あなたがプログラムを理解できない10の理由:第2回
新APIまもなく登場--Google Developer Day 2008の見所とは?
リスティング広告における競争優位性の維持
-Simplify IT- ITをシンプルに 連載第2回
内部統制対策を実現するIT運用管理ツール