カテゴリ: 基本情報技術者試験 更新日: 2026/05/08

HAVING句とは?初心者でもわかるデータベース集計の条件指定を徹底解説!

HAVING句
HAVING句

先生と生徒の会話形式で理解しよう

生徒

「先生、SQLのHAVING句(ハビングク)って何に使うんですか?WHERE句(ウェアク)とどう違うんですか?」

先生

「良い質問ですね。HAVING句は、GROUP BY句(グループバイク)でグループ化した結果に対して、さらに条件をつけるときに使う構文なんです。WHERE句ではグループ化前のデータを絞り込み、HAVING句ではグループ化後の集計結果を絞り込むんですよ。」

生徒

「なるほど!つまりHAVING句は集計が終わったあとに使うフィルタみたいなものなんですね?」

先生

「そうです。その通りです。では、HAVING句の使い方を具体的に見ていきましょう。」

基本情報技術者試験をこれから学習する人や、 独学で確実に合格レベルまで到達したい人におすすめの定番対策書です。

いちばんやさしい 基本情報技術者を見る

※ Amazonアソシエイト広告リンク

1. HAVING句(ハビングク)とは?

1. HAVING句(ハビングク)とは?
1. HAVING句(ハビングク)とは?

HAVING句(読み方:ハビングク)は、SQL(エスキューエル/Structured Query Language)の集計処理で使用される条件指定の構文です。GROUP BY句(グループバイク)でデータをグループ化したあと、その集計結果に対して条件を設定するときに使います。

たとえば、「部署ごとの平均給与を求めて、平均給与が30万円以上の部署だけを表示したい」といったケースでHAVING句が活躍します。WHERE句ではこのような集計後の条件は指定できないため、HAVING句が必要になります。

2. HAVING句の基本構文

2. HAVING句の基本構文
2. HAVING句の基本構文

HAVING句の基本的な書き方は次のとおりです。

SELECT 列名, 集合関数(列名)
FROM 表名
GROUP BY 列名
HAVING 条件;

この構文のポイントは、「GROUP BYでグループ化したあとにHAVINGで条件を設定する」という順番です。HAVINGは常にGROUP BYのあとに記述します。

3. HAVING句の具体例

3. HAVING句の具体例
3. HAVING句の具体例

たとえば、社員テーブル(employees)から部署ごとの平均給与を求め、平均が30万円以上の部署だけを表示したい場合は、次のように書きます。

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) >= 300000;

このSQL文では、AVG(エーブイジー)という集合関数を使って部署ごとの平均給与を計算しています。そしてHAVING句で「平均給与が30万円以上」という条件を指定しています。

4. WHERE句との違い

4. WHERE句との違い
4. WHERE句との違い

HAVING句とWHERE句の違いは、条件を適用するタイミングにあります。

  • WHERE句:グループ化する前に行データを絞り込む
  • HAVING句:グループ化したあとに集計結果を絞り込む

例えば「営業部だけを対象にして、その中で平均給与が30万円以上の部署を出したい」という場合は、WHERE句とHAVING句を組み合わせて使います。

SELECT department, AVG(salary)
FROM employees
WHERE department = '営業部'
GROUP BY department
HAVING AVG(salary) >= 300000;

このように、WHEREでグループ化前のデータを制限し、HAVINGでグループ化後の条件を指定します。

5. HAVING句で使える主な集合関数

5. HAVING句で使える主な集合関数
5. HAVING句で使える主な集合関数

HAVING句では、次のような集合関数(シュウゴウカンスウ)を条件に使うことが多いです。

  • COUNT():件数を数える
  • SUM():合計を求める
  • AVG():平均を求める
  • MAX():最大値を求める
  • MIN():最小値を求める

たとえば「社員数が10人以上の部署だけを表示する」場合は次のようになります。

SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;

このようにHAVING句は、集計した結果に対して柔軟に条件を設定できます。

6. HAVING句とORDER BY句の併用

6. HAVING句とORDER BY句の併用
6. HAVING句とORDER BY句の併用

HAVING句で条件を絞り込んだあと、結果を並び替えるにはORDER BY句(オーダーバイク)を使います。例えば、平均給与が30万円以上の部署を高い順に並べたいときは次のように書きます。

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) >= 300000
ORDER BY AVG(salary) DESC;

このように、HAVING句で条件を指定した後にORDER BYで並び替えると、結果がより見やすくなります。

7. HAVING句が使われる実務シーン

7. HAVING句が使われる実務シーン
7. HAVING句が使われる実務シーン

HAVING句は、売上や社員数などの「集計データを分析」するときによく使われます。例えば、月ごとの売上データをグループ化して、「売上が100万円以上の月だけを表示」したい場合などです。

SELECT month, SUM(sales)
FROM sales_data
GROUP BY month
HAVING SUM(sales) >= 1000000;

このSQL文を使うことで、条件を満たした集計結果だけを表示でき、ビジネス分析やレポート作成で大変役立ちます。

8. HAVING句の注意点

8. HAVING句の注意点
8. HAVING句の注意点

HAVING句では、基本的に集合関数を使った条件を指定します。個々の行データに対する条件はWHERE句で指定しなければなりません。間違ってHAVING句の中で個別データの条件を指定すると、エラーや意図しない結果になることがあります。

また、HAVING句はSQLの実行順序の中で、GROUP BY句の後に処理されます。したがって、HAVING句を使うときは、まずどの列でグループ化しているのかをしっかり確認しておきましょう。

9. HAVING句の歴史と今後の活用

9. HAVING句の歴史と今後の活用
9. HAVING句の歴史と今後の活用

HAVING句は、SQLの標準仕様として古くから存在する構文で、リレーショナルデータベース(RDB/アールディービー)の基本要素のひとつです。現在では、MySQL(マイエスキューエル)、PostgreSQL(ポストグレスキューエル)、Oracle(オラクル)、SQL Server(エスキューエルサーバー)など、あらゆるデータベースで利用できます。

さらに、クラウド環境でもHAVING句は欠かせません。Google BigQuery(グーグルビッグクエリ)やAmazon Redshift(アマゾンレッドシフト)などの分析サービスでも同じ構文が使えます。つまり、HAVING句を理解しておくことは、データベースを扱う上での基礎力を高め、実務でも役立つ重要なスキルといえるでしょう。

基本情報技術者試験の理解を確実に定着させたい人や、 科目A・Bをまとめて過去問演習したい人に向けた定番の問題集です。

基本情報技術者 パーフェクトラーニング 過去問題集を見る

※ Amazonアソシエイト広告リンク

まとめ

まとめ
まとめ

HAVING句は、SQLにおける集計処理の中でも特に重要な役割を持つ構文であり、GROUP BY句と組み合わせて使うことで、より高度なデータ抽出や分析を実現できます。データベースの操作においては、単にデータを取得するだけではなく、意味のある形に整理し、条件に応じて絞り込むことが求められます。そのような場面でHAVING句は欠かせない存在となります。

基本的なポイントとして、WHERE句とHAVING句の違いを正しく理解することが非常に大切です。WHERE句はデータをグループ化する前に条件を適用し、HAVING句はグループ化した後の集計結果に対して条件を適用します。この処理の順序を理解することで、SQL文の動きがより明確にイメージできるようになります。

例えば、売上データや社員データなど、ビジネスの現場では大量の情報が扱われます。その中から意味のある情報を取り出すには、単純な抽出だけでは不十分です。部署ごとの平均給与や、月ごとの売上合計など、グループ単位で集計し、その結果に対して条件を設定する必要があります。このときにHAVING句を活用することで、分析の精度を高めることができます。

また、HAVING句ではCOUNTやSUMやAVGといった集合関数を活用することが基本となります。これらの関数と組み合わせることで、件数や合計値や平均値といった指標をもとにした条件指定が可能になります。特にデータ分析やレポート作成では、これらの処理が頻繁に登場するため、HAVING句の理解は実務スキルとしても重要です。

さらに、WHERE句とHAVING句を組み合わせることで、より柔軟な条件設定が可能になります。例えば、特定の部署だけを対象にして、その中で条件を満たすグループを抽出するなど、段階的な絞り込みが実現できます。このような使い方を習得することで、SQLの表現力が大きく広がります。

実務の現場では、単純なデータ取得よりも、集計結果をもとにした判断や意思決定が求められる場面が多くあります。そのため、HAVING句を使いこなすことは、データベースエンジニアやシステム開発者だけでなく、データ分析に関わるすべての人にとって重要なスキルといえます。

SQLの学習においては、構文を覚えるだけでなく、どのような場面でどの構文を使うのかを理解することが重要です。HAVING句は一見すると難しく感じるかもしれませんが、GROUP BYとの関係性や処理の流れを意識することで、自然と使いこなせるようになります。

最後に、実際に手を動かしてSQL文を書くことが理解を深める近道です。サンプルデータを使って、さまざまな条件で集計を試してみることで、HAVING句の挙動や特徴を体感することができます。繰り返し練習することで、自然と応用力が身についていくでしょう。

サンプルプログラムで振り返る


SELECT department, COUNT(*) AS employee_count, AVG(salary) AS avg_salary
FROM employees
WHERE department IS NOT NULL
GROUP BY department
HAVING COUNT(*) >= 5 AND AVG(salary) >= 300000
ORDER BY avg_salary DESC;

このサンプルでは、部署ごとに社員数と平均給与を集計し、社員数が五人以上かつ平均給与が三十万円以上の部署のみを抽出しています。さらに平均給与の高い順に並び替えることで、結果を見やすくしています。このように複数の条件を組み合わせることで、より実践的なデータ抽出が可能になります。

先生と生徒の振り返り会話

生徒

HAVING句は集計した後に使うということが分かりましたが、最初はWHERE句との違いで混乱しました。

先生

その感覚はとても自然です。大切なのは処理の順番を意識することです。WHERE句はデータを絞ってからグループ化し、HAVING句はグループ化した結果に条件をつけます。

生徒

つまり、先に絞るか後で絞るかの違いということですね。

先生

その通りです。さらに、HAVING句ではCOUNTやAVGなどの集合関数を使うことが多い点も覚えておきましょう。

生徒

実務ではどんな場面で使うことが多いのでしょうか。

先生

売上分析や顧客分析など、グループ単位で結果を見たいときに頻繁に使います。条件付きの集計はビジネスでとても重要です。

生徒

実際に手を動かして書いてみると理解が深まりそうですね。

先生

はい。繰り返し書いていくことで自然と身につきます。SQLは経験がそのまま力になりますので、ぜひ色々なパターンを試してみてください。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

SQLのHAVING句(ハビングク)とは、一言でいうとどのような機能を持つ構文なのでしょうか?初心者にもわかりやすく教えてください。

SQLのHAVING句(ハビングク)とは、データベースで集計した結果に対して、さらに特定の条件を指定してデータを絞り込むための構文です。Structured Query Language(シラクチャード・クエリ・ランゲージ)において、GROUP BY句(グループバイク)を使用してデータをグループ化した後に、その集計値(合計や平均など)に基づいて表示するデータを制限したい場合に使用します。例えば「部署ごとの平均給与を計算したあと、その平均が30万円以上の部署だけを抽出する」といった操作が、HAVING句の主な役割です。
カテゴリの一覧へ
新着記事
New1
情報セキュリティマネジメント試験
RATとは?リモートアクセス型ウイルスの仕組みと対策を初心者向けに解説
更新記事
New2
基本情報技術者試験
ビッグデータとは?初心者でもわかる大量データ活用の基本と活用事例
更新記事
New3
基本情報技術者試験
クライアントとは?初心者でもわかるコンピュータの基本用語をやさしく解説
更新記事
New4
基本情報技術者試験
16進数とは?初心者にもわかる意味・読み方・変換方法をやさしく解説!
更新記事
人気記事
No.1
Java&Spring記事人気No1
基本情報技術者試験
NIC
310
NICとは何か?初心者にもわかるネットワークインターフェースカードの基本
No.2
Java&Spring記事人気No2
基本情報技術者試験
セグメントとは?ネットワークの基本単位を初心者向けにやさしく解説
No.3
Java&Spring記事人気No3
基本情報技術者試験
16進数とは?初心者にもわかる意味・読み方・変換方法をやさしく解説!
No.4
Java&Spring記事人気No4
基本情報技術者試験
DHCP
235
DHCPとは?初心者でもわかるIPアドレス自動割り当ての仕組み
No.5
Java&Spring記事人気No5
基本情報技術者試験
SMTP
174
SMTPとは?初心者でもわかるメール送信の仕組みとプロトコルをやさしく解説!
No.6
Java&Spring記事人気No6
基本情報技術者試験
IMAP
162
IMAPとは?初心者でもわかるメール受信プロトコルの仕組みと使い方
No.7
Java&Spring記事人気No7
基本情報技術者試験
CPU
158
CPUとは何かを完全解説!初心者でもわかるコンピュータの頭脳の仕組み
No.8
Java&Spring記事人気No8
基本情報技術者試験
マイクロ(μ)とは?初心者にもわかる単位の意味と使い方をやさしく解説