SQLデータをソート、グループ化、要約化するための10 Tips

文:Susan Harkins(TechRepublic) 翻訳校正:原井彰弘
2007-12-25 10:06:01
  • このエントリーをはてなブックマークに追加

 分析可能な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も集約関数をサポートしていない。

  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]