SQL のHAVINGとWHEREの違いを徹底解説!集計条件の正しい使い方

こんにちは、阿久梨絵です!
SQL の条件指定でよく使われる WHERE と HAVING は、一見似ているように見えますが、適用されるタイミングが異なります。

WHEREレコード単位でフィルタリング(GROUP BY のに適用)
HAVING集計結果に対してフィルタリング(GROUP BY のに適用)

簡単に言うと、「HAVING」は集計後のデータに条件を設定できる点がポイント です。

WHERE の基本的な使い方

WHERE は個別のレコードを対象にフィルタリングを行います。

SELECT product_name, price
FROM products
WHERE price > 5000;

ポイント

WHERE は 集計前のデータ を絞り込む
個別のレコードに直接適用される

この例では「価格が5000円以上の商品」だけを取得できます。

HAVING の基本的な使い方

HAVING は GROUP BY の後に集計結果をフィルタリング できます。

SELECT category, COUNT(*) AS total_products
FROM products
GROUP BY category
HAVING total_products > 10;

ポイント

・HAVING は 集計後のデータを対象にフィルタリング
GROUP BY でまとめた結果に条件を設定できる

この例では「商品数が10個以上のカテゴリー」だけを取得できます。

WHERE と HAVING の違いを比較

用途WHEREHAVING
フィルタの対象個々のレコード集計後のデータ
GROUP BY の適用
使用例price > 5000COUNT(*) > 10

データが集計される前にフィルタするなら WHERE集計後にフィルタするなら HAVING を使い分けるのが重要です。

まとめ

WHERE はレコード単位のフィルタリングで、集計前に適用される
HAVING は集計後の結果に適用され、GROUP BY と組み合わせて使う
フィルタを適用するタイミングを意識すると、より正確なデータが取得できる

「WHERE」と「HAVING」の正しい使い分けをマスターし、 SQL の条件指定をスムーズにしましょう。
阿久梨絵でした!

Verified by MonsterInsights