Skip to the content.

最終更新日:2026年6月22日

DS検定トップ > HAVINGとは?WHEREとの違いを整理【DS検定】

まず結論

HAVINGは、GROUP BYで集計した後の結果に条件を付けるSQL構文です。

DS検定では、WHEREは集計前の行を絞る、HAVINGは集計後のグループを絞るという処理タイミングの違いを判断できることが重要です。

直感的な説明

注文データから「売上合計が5万円以上の顧客」を探す場面を考えます。

顧客 商品 売上
田中 ノートPC 120000
田中 キーボード 8000
佐藤 マウス 3000
佐藤 モニター 30000

最初から「売上合計」は各行には存在しません。まず顧客ごとにGROUP BYでまとめて、合計を計算する必要があります。

顧客 売上合計
田中 128000
佐藤 33000

この集計結果に対して「50000以上」という条件をかけるのがHAVINGです。

定義・仕組み

HAVINGは、GROUP BYで作られたグループや集計結果に条件を指定します。

SELECT customer, SUM(sales) AS total_sales
FROM orders
GROUP BY customer
HAVING SUM(sales) >= 50000;

このSQLは、顧客ごとに売上を合計し、その合計が50000以上の顧客だけを返します。

処理の流れは、初学者向けには次の順で理解すると十分です。

  1. FROMでテーブルを見る
  2. WHEREで集計前の行を絞る
  3. GROUP BYでグループ化する
  4. HAVINGで集計後の結果を絞る
  5. SELECTで表示する列を決める

どんな場面で使う?

HAVINGは、集計した結果に条件を付けたいときに使います。

  • 売上合計が一定以上の顧客を抽出する
  • 注文回数が多い商品を探す
  • 平均単価が一定以上の店舗を確認する
  • グループごとの件数が少なすぎるデータを除外する

実務では、分析対象を「行」ではなく「顧客・商品・店舗などのまとまり」で判断したいときに使います。

よくある誤解・混同

① WHEREとHAVINGを同じ条件指定だと思う

どちらも条件を書く構文ですが、対象が違います。

構文 絞り込む対象
WHERE 集計前の行 sales >= 1000
HAVING 集計後のグループ SUM(sales) >= 50000

DS検定では、「集計前か集計後か」を読むだけで誤答を切れることがあります。

② 集計関数をWHEREに書いてしまう

次のようなSQLは、考え方として誤りです。

SELECT customer, SUM(sales)
FROM orders
WHERE SUM(sales) >= 50000
GROUP BY customer;

SUM(sales) はGROUP BY後に計算されるため、WHEREではなくHAVINGに書きます。

③ HAVINGは何でもWHEREの代わりになると思う

行単位で絞れる条件は、基本的にはWHEREに書きます。先に不要な行を絞ってから集計した方が、意図も処理も分かりやすくなります。

まとめ(試験直前用)

  • HAVINGは集計後の結果に条件を付ける
  • WHEREは集計前の行、HAVINGは集計後のグループを絞る
  • SUMCOUNT などの集計条件はHAVINGで判断する
  • GROUP BYとセットで読むと理解しやすい
  • DS検定では「条件の対象が行か、集計結果か」を見る

対応スキル項目(データエンジニアリング力シート)

  • スキルカテゴリ:プログラミング
  • サブカテゴリ:SQL
  • ★ SQLの構文を一通り知っていて、記述・実行できる(DML・DDLの理解、各種JOINの使い分け、集計関数とGROUP BY、CASE文を使用した縦横変換、副問合せやEXISTSの活用など)

🔗 関連記事



© 2024-2026 stemtazoo. All rights reserved.