データベース

基本情報技術者試験SQL」の問題

テクノロジ系データベース難易度:normal
SQLで、部署ごとの社員数を求め、社員数が5人を超える部署だけを抽出したい。GROUP BYで集計した後にその集計結果を条件で絞り込むために用いる句はどれか。
集計前の行を絞り込むWHERE句
結果を並べ替えるORDER BY句
集計後の結果を絞り込むHAVING句
出力件数を制限するための句(行数の上限指定)
正解
集計後の結果を絞り込むHAVING句

WHEREは集計前の個々の行に対する条件、HAVINGは集計後のグループに対する条件を指定する。『社員数が5人を超える』は集計結果COUNT(*)への条件なのでHAVING句が正しい。

?選択肢ごとの解説

ア ×WHERE句は集計前の行を絞り込む句であり、COUNT(*)などの集約結果を条件にできないため目的に合わない。
イ ×ORDER BY句は結果の並べ替えを行う句であり、条件で行を絞り込む機能は持たない。
ウ ○WHEREは集計前の個々の行に対する条件、HAVINGは集計後のグループに対する条件を指定する。『社員数が5人を超える』は集計結果COUNT(*)への条件なのでHAVING句が正しい。
エ ×出力件数を上限で制限する指定は単に件数を切るだけで、集計値の大小で絞り込むことはできない。

くわしく

SQLの評価順序はおおむねFROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BYである。集約関数(COUNT,SUM,AVG等)の結果を条件にするにはグループ化後のHAVINGを使う。WHEREとHAVINGの違いは『集計の前か後か』にある。

本番での押さえどころ

試験のコツ

『個々の行の条件=WHERE、グループ全体の条件=HAVING』と評価段階で使い分ける。COUNTやSUMが条件に入ればHAVING。

覚え方

HAVINGは『まとめた後で持っている(having)条件』。グループを作ってから絞る、と語感で覚える。

よくある誤り

集約結果をWHEREで絞ろうとしてエラーになる誤りが頻出。集約条件はHAVINGと覚える。

データベースの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0052

【基本情報技術者試験】SQLの問題 — 解答・解説|ukamiru 過去問