GROUP BYとHAVINGとは?
GROUP BYとHAVINGとは、GROUP BYは指定した列の値ごとに行をまとめ、COUNTやSUMなどの集約関数をグループごとに適用する句。HAVINGはまとめた後のグループに対する絞り込み条件を指定する。WHEREがまとめる前の行を絞るのに対し、HAVINGは集約結果を条件にできる点が異なる。
ITサービスマネージャ試験の過去問では1回出題されています。
ぐるーぷばいとはびんぐ
GROUP BYとHAVINGの意味
GROUP BYは指定した列の値ごとに行をまとめ、COUNTやSUMなどの集約関数をグループごとに適用する句。HAVINGはまとめた後のグループに対する絞り込み条件を指定する。WHEREがまとめる前の行を絞るのに対し、HAVINGは集約結果を条件にできる点が異なる。
GROUP BYとHAVINGの具体例
「月間受注が100万円を超えた得意先」を求めるには、得意先コードでGROUP BYし、HAVING SUM(金額) > 1000000 とする。これをWHEREに書くことはできない。対象月の限定は行単位の条件なのでWHEREで先に絞ると処理量が減る。
GROUP BYとHAVINGは試験でどう引っ掛けられる?
HAVINGはWHEREの代わりではない。行単位で絞れる条件までHAVINGに書くと、集約対象の行数が減らず性能が落ちる。またGROUP BYに含めない列を選択列に書けない制約も、実装差があるため設計時に確認する。
GROUP BYとHAVINGと関連する用語
GROUP BYとHAVINGが出た過去問
“社員”表から、役割名がプログラマである社員が3人以上所属している部門の部門名を取得するSQL文はどれか。ここで、実線の下線は主キーを表す。 社員(社員番号, …
正解:SELECT 部門名 FROM 社員 WHERE 役割名 = 'プログラマ' GROUP BY 部門名 HAVING COUNT(*) >= 3
要点:行の条件はWHERE、集約後の条件はHAVINGに書く
SQLの評価順は、WHEREで行を絞り込み、GROUP BYで集約し、HAVINGで集約結果を絞り込む、という順序になる。したがって役割名の条件は行単位なのでWHEREに、人数3人以上という集約後の条件はHAVING COUNT(*)>=3に書く必要がある。集約関数をWHEREに書くことはできず、HAVINGをWHEREより前に置くこともできない。
出典:平成30年度 秋期 ITサービスマネージャ試験 am2 問21(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。