DISTINCTとGROUP BYはどちらも重複するレコードを排除するために使用されますが、それぞれ異なる目的と使い方があります。DISTINCTはSELECT文で指定した列の値の組み合わせが重複する行を排除し、一意な行のみを抽出します。GROUP BYは指定した列でレコードをグループ化し、グループごとに集計関数を適用して集計結果を得るために使用されます。ビューは、SQLクエリの結果を仮想テーブルとして保存するもので、DISTINCTやGROUP BYを含むクエリをビューとして定義することも可能です。
集計関数に関してはこちら
DISTINCTとGROUP BYの違い
- DISTINCT:重複する行を排除し、一意な行のみを抽出します。例えば、顧客IDのリストから重複するIDを除外して、一意な顧客IDのリストを取得する場合などに使用します。
- GROUP BY:指定した列でレコードをグループ化し、グループごとに集計関数を適用して集計結果を得ます。例えば、各商品の売上を月ごとに集計する場合などに使用します.
ビューについて
ビューは、SQLクエリの結果を仮想テーブルとして保存する機能です。ビューを使用することで、複雑なクエリを簡略化したり、セキュリティを向上させたりすることができます。ビューは、SELECT文で定義され、あたかも実在のテーブルのように扱うことができます.
DISTINCTとGROUP BYを含むビュー
DISTINCTやGROUP BYを含むSELECT文をビューとして定義することができます。例えば、顧客の年齢層ごとの顧客数を集計するビューを作成する場合、以下のようなクエリをビューとして定義できます。
ソースコード
CREATE VIEW AgeGroupCounts AS
SELECT AgeGroup, COUNT(*) AS CustomerCount
FROM (
SELECT
CASE
WHEN Age BETWEEN 20 AND 29 THEN '20-29'
WHEN Age BETWEEN 30 AND 39 THEN '30-39'
WHEN Age BETWEEN 40 AND 49 THEN '40-49'
ELSE 'Other'
END AS AgeGroup
FROM Customers
) AS SubQuery
GROUP BY AgeGroup;
このビューを使用することで、年齢層ごとの顧客数を簡単に取得できます。
ソースコード
SELECT * FROM AgeGroupCounts;
まとめ
DISTINCTは重複する行を排除し、一意な行を取得するために使用されます。GROUP BYはレコードをグループ化し、集計関数を適用するために使用されます。これらの句は、ビューとして定義することで、クエリの簡略化や再利用性を高めることができます。
コメント