HAVING句とWHERE句の使い分けとは?
HAVING句とWHERE句の使い分けとは、WHERE句はグループ化の前に個々の行を絞り込み、HAVING句はグループ化した後のグループを絞り込む。評価順序はFROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BYであり、この順序を理解していれば集約関数を書ける場所も自然に決まる。
応用情報技術者試験の過去問では1回出題されています。
はびんぐくとほわいあくのつかいわけ
HAVING句とWHERE句の使い分けの意味
WHERE句はグループ化の前に個々の行を絞り込み、HAVING句はグループ化した後のグループを絞り込む。評価順序はFROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BYであり、この順序を理解していれば集約関数を書ける場所も自然に決まる。
HAVING句とWHERE句の使い分けの具体例
「2024年度の売上について、合計が100万円を超える部門」を出すなら、年度の条件はWHEREに、合計額の条件はHAVINGに書く。年度条件をHAVINGへ移すと他年度の行まで合計に入ってから絞られるため、100万円の判定そのものが誤る。
HAVING句とWHERE句の使い分けは試験でどう引っ掛けられる?
WHERE句には集約関数(SUM・COUNT等)を書けない。グループがまだ確定していない段階で評価されるためで、これは実装上の制限ではなく評価順序の必然。またSELECT句の別名はWHERE・HAVINGでは使えないのが標準の扱い。
HAVING句とWHERE句の使い分けと関連する用語
HAVING句とWHERE句の使い分けが出た過去問
過去3年分の記録を保存している“試験結果”表から、2018年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧を取得するSQL文はどれか。ここで…
正解:SELECT クラス名, AVG(点数) FROM 試験結果 WHERE 受験年月日 BETWEEN '2018-04-01' AND '2019-03-31' GROUP BY クラス名 HAVING AVG(点数) >= 600
要点:行の絞り込みはWHERE、集約結果の絞り込みはHAVINGに書く
2018年度に限定するには受験年月日を2018年4月1日から2019年3月31日の範囲でWHERE句により行単位で絞り込む。そのうえでクラス名でGROUP BYし、グループ全体の集計値に対する条件はHAVING句に書く必要があるため、HAVING AVG(点数) >= 600 とする。
出典:令和1年度 春期 応用情報技術者試験 午前 問28(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。