SQLのGROUP BY句とHAVING句の役割と使い方

Oracle

SQLでデータを集計する際、GROUP BY句とHAVING句を組み合わせることで、特定の条件を満たすグループを抽出できます。この記事では、GROUP BY句とHAVING句の役割を解説し、HAVING句の主な役割に焦点を当てて、実際の使い方を説明します。

GROUP BY句とHAVING句とは?

SQLのGROUP BY句は、指定したカラムを基にレコードをグループ化します。集計関数(SUM、COUNT、AVGなど)と共に使用されることが多いです。HAVING句は、グループ化されたデータに対して条件を絞り込むために使われます。WHERE句と似ていますが、WHERE句は個々の行に対して条件を指定するのに対し、HAVING句はグループ単位で条件を指定します。

HAVING句の主な役割

HAVING句の主な役割は、GROUP BY句によってグループ化された結果に対して条件を指定することです。例えば、グループごとに集計した合計金額が一定の値以上であるグループのみを抽出する場合に使用します。WHERE句は個別の行に対してフィルタリングを行いますが、HAVING句は集計結果に基づいて絞り込みを行うため、グループ化されたデータに対して条件を設定することができます。

HAVING句の使用例

例えば、以下のSQL文では、売上の合計が1000以上の顧客を抽出しています。

SELECT customer_id, SUM(amount) AS total_sales FROM sales GROUP BY customer_id HAVING SUM(amount) >= 1000;

このクエリでは、まずGROUP BYで顧客ごとに売上を集計し、その後HAVINGで売上合計が1000以上の顧客のみを抽出しています。WHERE句では集計後の条件を指定できないため、このような場合にHAVING句が必要です。

HAVING句とWHERE句の違い

HAVING句とWHERE句は似ていますが、重要な違いがあります。WHERE句はグループ化の前にレコードをフィルタリングするのに対し、HAVING句はグループ化後に集計結果を絞り込みます。したがって、HAVING句は集計関数と一緒に使用することが一般的です。

まとめ

HAVING句は、GROUP BY句によってグループ化されたデータに対して条件を設定するために使用します。集計後のデータに対してフィルタリングを行いたい場合に非常に有用です。WHERE句と合わせて使うことで、効率的にデータを抽出することができます。

コメント

タイトルとURLをコピーしました