IPA過去問ドリル

令和元年度 秋期 基本情報技術者試験 午前 問26

テクノロジ/データベース

“得点”表から,学生ごとに全科目の点数の平均を算出し,平均が80点以上の学生の学生番号とその平均点を求める。a に入れる適切な字句はどれか。ここで,実線の下線は主キーを表す。 得点(学生番号, 科目, 点数) 〔SQL文〕 SELECT 学生番号, AVG(点数) FROM 得点 GROUP BY a

出典:令和元年度 秋期 基本情報技術者試験 午前 問26

正解:ウ

解説

「学生ごとに」平均を求めるので,GROUP BY の対象は学生番号です。また「平均が80点以上」という条件は,グループ化して集計した結果に対する絞込みなので,WHERE ではなく HAVING 句で AVG(点数) >= 80 と指定します。WHERE は grouping の前に個々の行を絞り込む句なので,集計関数を書くことはできません。

選択肢ごとの解説

  • 誤り。GROUP BY 科目 では科目ごとの平均になってしまい,学生ごとの平均になりません。
  • 誤り。科目でグループ化している点に加え,GROUP BY の後ろに WHERE を書くことは構文上できません。
  • 正しい。学生番号でグループ化し,HAVING 句で集計結果である平均点を80点以上に絞り込んでいます。
  • 誤り。WHERE 点数 >= 80 は個々の得点が80点以上の行だけを対象にしてしまい,全科目の平均が80点以上という条件になりません。また GROUP BY の後ろに WHERE は書けません。
基本情報技術者の過去問を演習モードで解く