特定の SQL 句と演算子を使用して SQL データを効率的に分析できるように配置する方法を理解する必要があります。ここでは、必要な結果を得るためにステートメントを作成する方法についていくつかの提案を示します。
意味のある方法でデータを整理するのは難しい場合があります。単純な分類だけが必要な場合もあります。多くの場合、分析のためのグループ化や合計など、さらに多くの処理が必要になります。幸いなことに、SQL には、分類、グループ化、および合計のための多数の句と演算子が用意されています。以下の提案は、いつ分類するか、いつグループ化するか、いつ、どのように合計するかを知るのに役立ちます。各句と演算子の詳細については、オンライン ブックを参照してください。
#1: カテゴリ別並べ替え
多くの場合、すべてのデータを並べ替える必要があります。 SQL の ORDER BY 句は、データをアルファベット順または数値順に並べ替えます。したがって、同種のデータは明確にグループに分類されます。ただし、これらのグループは分類の結果にすぎず、実際のグループではありません。 ORDER BY は各レコードを表示し、グループは複数のレコードを表す場合があります。
#2: グループ内の類似データを減らす
分類とグループ化の最大の違いは、分類データには (制限基準内の) すべてのレコードが表示されるのに対し、グループ化されたデータにはこれらのレコードが表示されないことです。 GROUP BY 句は、レコード内の類似したデータを削減します。たとえば、GROUP BY は、それらの値を複製するソース ファイルから郵便番号の一意のリストを返すことができます。
SELECT ZIP
FROM Customers
GROUP BY ZIP
GROUP BY 列リストと SELECT 列リストにはリテラル グループである列のみを含めます。つまり、SELECT リストは GROUP リストと一致する必要があります。例外が 1 つだけあります。SELECT リストには集計関数を含めることができます。 (また、GROUP BY は集計関数をサポートしません。)
GROUP BY は結果のグループを分類しないことに注意してください。グループをアルファベット順または数値順に並べ替えるには、ORDER BY 句 (#1) を追加します。さらに、GROUP BY 句でエイリアス化されたドメインを参照することはできません。グループ列は基になるデータ内に存在する必要がありますが、結果に表示される必要はありません。
#3: グループ化する前にデータを修飾する
WHERE 句を追加して、GROUP BY によってグループ化されたデータを修飾できます。たとえば、次のステートメントは、ケンタッキー州地域の顧客の郵便番号のリストのみを返します。
SELECT ZIP
FROM Customers
WHERE State = 'KY'
GROUP BY ZIP
WHERE は、GROUP BY 句がデータを評価する前にデータをフィルタリングします。これを覚えておくことが重要です。
GROUP BY と同様に、WHERE は集計関数をサポートしません。
#4: すべてのグループを返す
WHERE でデータをフィルターすると、結果のグループには指定したレコードのみが表示されます。グループ定義には一致するが、句の条件を満たさないデータはグループに表示されません。 WHERE 条件に関係なく、すべてのデータを含める場合は、ALL 句を追加します。たとえば、前のステートメントに ALL 句を追加すると、ケンタッキー州だけでなく、すべての郵便番号グループが返されます。
郵便番号を選択