SQLは並べ替え、グループ分け、統計の10の新しい技術を共有します。


1.並べ替えを使ってデータを秩序化させるのは普通で、あなたのすべてのデータは本当に必要なのはある順序だけです。SQLのORDER BY文は、データをアルファベットまたは数字順に整理することができます。したがって、類似の値はグループで並べ替えられます。しかし、このパケットは並べ替えの結果、本当のグループではない。ORDER BYは、各レコードを表示し、パケットは多くの記録を表すことができる。2.パケット除去を行う重複値並び替えとパケット間の最大の違いは、並べ替えられたデータは全ての記録を表示することであり(基準範囲内で)、パケットデータは全ての記録を表示することではない。GROUTP BY文は同じ値に対して一つのレコードしか表示されません。例えば、以下の文のGROUT BY文は、データソースで重複したデータに対して一意のzip符号化列のみを返します。
 
SELECT ZIP FROM Customers GROUP BY ZIP 
 
は、GROUT BYとSELECT文で共通に定義されている記録のみを含み、言い換えれば、SELECTリストは、GROUT BYリストを満たす必要がありますが、例外的にSELECTリストは、アグリゲーション関数を含むことができます。なお、GROUTP BY文は結果パケットをソートしません。グループをアルファベットまたは数字で並べ替えるためには、ORDER BY文を追加する必要があります。また、GROUTP BY文ではエイリアスが使用されているフィールドを参照することはできません。グループセクションは潜在的なデータでなければなりませんが、結果に表示する必要はありません。3.グループ化前にデータフィルタを行います。 GROUTP BYで得られたグループのデータをフィルタするためにWHERE文を追加してもいいです。例えば、以下の文はケンタッキー州のお客様の唯一のZIPコード列のみに戻ります。

SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ZIP 
 
で注意しなければならないのは、WHERE文がGROUT BY文の値を求める前にデータフィルタリングされていることである。GROUT BY文と同様に、WHERE文も集計関数をサポートしていません。4.すべてのグループに戻る WHERE文を使ってデータをフィルタリングすると、グループの中にはあなたが指定した記録だけが表示され、グループの定義に合致しますが、フィルタ条件を満たしていないデータはグループに含まれません。すべてのデータをグループに含める場合はキーワードALLを追加すればいいです。WHERE条件は機能しません。例えば、前の例では、キーワードALLを追加すると、すべてのZIPパケットに戻ります。ケンタッキー州だけのものではありません。
  
SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ALL ZIP 
このように見て、この2つの語句は衝突があって、あなたはこのようにキーワードALLを使うことはできないかもしれません。統合関数を使って列を計算すると、ALLキーワードを使うと便利かもしれません。例えば、以下の文では、ケンタッキー州ZIPにおける顧客数を計算し、他のZIP値も表示する。
  
SELECT ZIP, Count(ZIP) AS KYCustomersByZIP FROM Customers WHERE State = 'KY' GROUP BY ALL ZIP 
 
の結果パケットは、潜在的データのすべてのZIP値を含むが、ケンタッキー州ZIPパケットではないそれらの統合された列(KYCustomersByZIP)には0が表示される。リモートクエリはGROUTP BY ALLに対応していません。5.グループ分け後にデータWHERE文をフィルタリングし、GROUT BY文の前で計算します。グループ化後にデータをフィルタする必要がある場合は、HARVING文を使用することができます。通常、WHERE文とHARVING文の返却結果は同じですが、この2つの文は交換できないので注意が必要です。迷ったときは、下記の説明に従います。WHERE文を使って記録をフィルタリングし、HAVING文を使ってグループをフィルタリングします。一般的に、HAVING文とある集計関数を使ってグループを計算します。例えば、以下の文は一意のZIP符号化列を返すが、潜在的なデータソースのすべてのZIPは含まれないかもしれない。
 
SELECT ZIP, Count(ZIP) AS Customers FROM Customers GROUP BY ZIP HAVING Count(ZIP) = 1 
 
は一人の顧客を含むグループだけが結果に表示されます。6.WHEREとHAVING文をさらに理解するいつWHEREを使うべきか、いつHAVINGを使うべきか迷っています。以下の説明に従ってください。WHERE文はGROUTP BY文の前にあります。SQLは、パケットの前にWHERE文を計算する。HAVING文はGROUTP BY文の後にあります。SQLはグループ化後にHAVING文を計算します。7.集計関数を使ってパケットデータを統計する パケットデータはデータの解析を助けてくれますが、グループだけでなく多くの情報が必要になる場合があります。統合関数を使ってグループデータを統計できます。例えば、次の文は注文書ごとの総価格を表示します。

SELECT OrderID, Sum(Cost * Quantity) AS OrderTotal  FROM Orders GROUP BY OrderID 
 
は他のパケットに対して、SELECTとGROUT BY列が一致しなければならない。SELECT文が集計関数を含む場合、この規則は例外です。8.集計集計データ 統計を続けると、各グループに分類統計を表示します。SQLのROLLUPオペレータは、各パケットに追加の分類統計を示すことができる。この分類統計は、集計関数を用いて、各パケットにおけるすべての記録を計算した結果である。以下のステートメントは、各パケット計算OrderTotal:
 
SELECT Customer, OrderNumber, Sum(Cost * Quantity)  AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH ROLLUP 
は、それぞれ20と25のOder Total値がある2つのパケットについて、ROLLUPはOrder Total値45を表示する。ROLLUPの結果における第一の記録は唯一であり、これは全パケット記録を計算するものであり、この値は全記録セットの総価値である。ROLLUPは、集計関数でDISTINCTはサポートされておらず、GROUT BY ALL文もサポートされていません。9.各列を統計する CUBEオペレータは、ROLLUPよりもさらに進み、各パケットの重複値の個数を返す。その結果はROLLUPと同じですが、お客様ひとりひとりの列CUBEには追加の記録が含まれています。下記の文は各グループの統計と追加のお客様一人の統計を示します。
 
SELECT Customer, OrderNumber, Sum(Cost * Quantity)  AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH CUBE 
 
CUBEは最も総合的な統計を与えることができます。これは、統合およびROLLUPの機能を完了するだけでなく、パケットを定義する他の列を計算することができ、言い換えれば、CUBEは、可能な各列の組み合わせを統計する。CUBEはGROUTP BY ALL文をサポートしていません。10:統計結果の並べ替え CUBEの結果が迷う場合(しばしばそうである)、GROUTPING関数を追加することができ、以下に示すように、
  
SELECT GROUPING(Customer), OrderNumber, Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH CUBE 
 
の結果には、各行に2つの追加の値が含まれている。値1は、左の値が統計値であり、ROLLUPまたはCUBEの操作子である。値0は左の値を表しています。最初のGROUTP BY文によって生成された詳細な記録です。