HAVINGとは?はびんぐ
HAVINGとは、SQLのSELECT文で、GROUP BYでまとめたグループのうち、条件に合うグループだけを残す指定。日本語にすると「集計した結果が〜のグループだけ」にあたる。条件には AVG(点数) >= 80 のように集約関数の結果を使える。行を1行ずつ選ぶWHEREに対して、HAVINGはグループ単位で選ぶ。
最終更新:2026-10-10
この語が出る過去問を解く →背景
「平均点が80点以上の学生」を探したくても、平均点はグループにまとめて計算した後でないと存在しない。行を選ぶWHEREは集計の前に働くので、集計結果を条件に使えない。そこで、集計の後でグループを選ぶための別の指定としてHAVINGが用意された。
具体例
「SELECT 学生番号, AVG(点数) FROM 得点 GROUP BY 学生番号 HAVING AVG(点数) >= 80」は、「学生番号ごとに平均点を求め、平均が80点以上の学生だけを出せ」という意味になる。Amazonのような通販の注文の表なら、顧客ごとにまとめて「HAVING COUNT(*) >= 3」とすれば、3回以上注文した顧客だけを取り出せる。
試験での引っ掛け
集約関数の結果で絞り込むのにWHEREを使う選択肢が定番の誤り。処理の順番は、FROM(どの表か)→WHERE(行を選ぶ)→GROUP BY(まとめる)→HAVING(グループを選ぶ)→SELECT(出す列)→ORDER BY(並べる)で、WHEREの段階ではまだ平均が出ていない。逆に、集計前の行で決まる条件(「科目が数学の行だけ」など)はWHEREに書くほうが、まとめる行が減って効率がよい。
関連用語
出た過去問
出典:令和元年度 秋期 基本情報技術者試験 午前 問26(IPA)
“得点”表から、学生ごとに全科目の点数の平均を算出し、平均が80点以上の学生の学生番号とその平均点を求める。aに入れる適切な字句はどれか。ここで、実線の下線は主…
正解:学生番号 HAVING AVG(点数) >= 80
要点:集約結果での絞り込みはWHEREでなくHAVINGを使う
学生ごとの平均を出すには、集計の単位となる学生番号でGROUP BYする必要がある。さらに「平均が80点以上」という条件は集約関数の結果に対する絞り込みなので、行単位で働くWHEREではなくグループ単位で働くHAVINGを使う。よって学生番号でグループ化し、HAVINGで平均点を判定する形になる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。