サイトアイコン プログラマー(PG)・システムエンジニア(SE)になるための入門講座

HAVINGとは?SQL初心者向けに基本から使い方までわかりやすく解説

HAVINGとは?SQL初心者向けに基本から使い方までわかりやすく解説

HAVING(ハビング)とは、GROUP BYでグループ化した後の集計結果に対して条件を指定するSQLの機能です。

「部署ごとの社員数が10人以上の部署だけ表示したい」「商品ごとの売上合計が100万円以上の商品だけ取得したい」といった集計結果を絞り込む場合に使用します。

HAVINGとは?

HAVINGは、SQL(Structured Query Language)の条件指定機能の一つです。

WHERE句がグループ化する前のデータを絞り込むのに対し、HAVINGはGROUP BYで集計した後の結果を絞り込みます。

そのため、COUNT()やSUM()などの集計関数を条件として使用できる点が大きな特徴です。

HAVINGはどんな場面で使われるのか

実際のIT現場では、次のような業務で利用されています。

データ分析やレポート作成では、HAVINGを利用する機会が多くあります。

なぜHAVINGが重要なのか

GROUP BYだけでは、すべてのグループが表示されます。

しかし、業務では「一定の条件を満たすグループだけ見たい」というケースがほとんどです。

HAVINGを使うことで、必要な集計結果だけを取得できるため、分析や障害調査の効率が向上します。

HAVINGのイメージ

社員テーブル

部署名 社員名
営業部 山田
営業部 佐藤
営業部 鈴木
総務部 田中

GROUP BYで部署ごとの人数を集計すると次のようになります。

部署名 人数
営業部 3
総務部 1

さらにHAVINGを使用して「2人以上」の部署だけ表示すると、営業部だけが表示されます。

部署名 人数
営業部 3

HAVINGの基本構文

SELECT 部署名, COUNT(*)
FROM 社員
GROUP BY 部署名
HAVING COUNT(*) >= 2;

このSQLでは、社員が2人以上所属している部署だけを表示します。

WHEREとの違い

比較項目 WHERE HAVING
対象 元データ 集計後のデータ
GROUP BY前 実行される 実行されない
集計関数 基本的に使用できない 使用できる
主な用途 データの絞り込み 集計結果の絞り込み

初心者はWHEREは集計前、HAVINGは集計後と覚えると理解しやすくなります。

GROUP BYとの関係

HAVINGは、GROUP BYと組み合わせて使用することが一般的です。

実行される順番は次のとおりです。

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

この順番を理解すると、WHEREとHAVINGの違いが分かりやすくなります。

実際のIT現場での利用例

業務 利用例
社員管理 社員数が多い部署を抽出する
販売管理 売上が多い商品を抽出する
アクセスログ分析 アクセス回数が多いIPアドレスを抽出する
システム監視 エラーが多いサーバーを特定する
ヘルプデスク 問い合わせ件数が多いカテゴリを集計する

業務でよくあるトラブル

WHEREでCOUNT()を書いてエラーになる

COUNT()などの集計関数はHAVINGで使用します。

GROUP BYを書き忘れる

HAVINGだけでは期待した集計結果にならない場合があります。

件数が想定より少ない

HAVINGの条件が厳しすぎる可能性があります。

原因の切り分け

確認項目 確認内容
GROUP BY 正しく指定しているか
HAVING条件 条件が厳しすぎないか
集計関数 COUNTやSUMを正しく使用しているか
WHERE句 必要なデータを除外していないか
元データ データ件数を確認する

確認する順番

  1. 元データを確認する
  2. WHERE句で絞り込み条件を確認する
  3. GROUP BYで集計する
  4. HAVING条件を確認する
  5. 取得件数を確認する

GUIでの確認方法

まずGROUP BYだけを実行し、その後HAVINGを追加すると結果の違いを理解しやすくなります。

CUI(コマンド)での確認方法

コマンドラインツールからSQLを実行し、集計結果を確認できます。

ログの確認方法

HAVING自体はWindowsイベントログには記録されません。

SQLエラーが発生した場合は、データベースサーバーのエラーログや実行ログを確認します。

イベントビューアーの確認方法

通常は不要です。

データベースサービスの停止や接続エラーが発生した場合のみ、Windowsイベントビューアーを確認します。

PowerShellで確認できること

ショートカットキー

キー 用途
F5 SQL実行(SSMS)
Ctrl + A 全文選択
Ctrl + C 実行停止
Ctrl + F 検索

初心者がやりがちなミス

筆者の経験談

システム障害の調査で、エラーコードごとの発生件数を集計していました。当初はGROUP BYだけを使用していましたが、エラー件数が1件のデータまで表示され、重要なエラーを見つけにくい状態でした。

HAVING COUNT(*) >= 10を追加したところ、頻繁に発生しているエラーだけを抽出でき、障害の原因を短時間で特定できました。実務では「集計した後に絞り込む」という考え方が非常に重要です。

上司へ報告するポイント

エスカレーションするタイミング

新人が覚えておくべきポイント

関連するIT用語

よくある質問(FAQ)

HAVINGとWHEREは何が違いますか?

WHEREはグループ化する前のデータを絞り込みます。HAVINGはGROUP BYで集計した後の結果を絞り込みます。

HAVINGだけで使えますか?

データベース製品によってはGROUP BYなしでも使用できる場合がありますが、実務ではGROUP BYと組み合わせて利用することが一般的です。

COUNT()はWHEREで使えますか?

基本的には使用できません。COUNT()などの集計関数を条件として利用する場合はHAVINGを使用します。

まとめ

HAVINGは、GROUP BYで集計した結果に対して条件を指定するSQLの機能です。

売上分析やログ分析、社員数の集計など、IT業務では集計結果を絞り込む場面で頻繁に利用されます。

まずは「WHEREは集計前、HAVINGは集計後」という違いを理解し、GROUP BYと組み合わせて使えるようになると、より実践的なSQLを書けるようになります。

モバイルバージョンを終了