令和元年度 秋期 基本情報技術者試験 午前 問26
テクノロジ/データベース“得点”表から,学生ごとに全科目の点数の平均を算出し,平均が80点以上の学生の学生番号とその平均点を求める。a に入れる適切な字句はどれか。ここで,実線の下線は主キーを表す。 得点(学生番号, 科目, 点数) 〔SQL文〕 SELECT 学生番号, AVG(点数) FROM 得点 GROUP BY a
出典:令和元年度 秋期 基本情報技術者試験 午前 問26
- ア科目 HAVING AVG(点数) >= 80
- イ科目 WHERE 点数 >= 80
- ウ学生番号 HAVING AVG(点数) >= 80
- エ学生番号 WHERE 点数 >= 80
正解:ウ
解説
「学生ごとに」平均を求めるので,GROUP BY の対象は学生番号です。また「平均が80点以上」という条件は,グループ化して集計した結果に対する絞込みなので,WHERE ではなく HAVING 句で AVG(点数) >= 80 と指定します。WHERE は grouping の前に個々の行を絞り込む句なので,集計関数を書くことはできません。
選択肢ごとの解説
- ア誤り。GROUP BY 科目 では科目ごとの平均になってしまい,学生ごとの平均になりません。
- イ誤り。科目でグループ化している点に加え,GROUP BY の後ろに WHERE を書くことは構文上できません。
- ウ正しい。学生番号でグループ化し,HAVING 句で集計結果である平均点を80点以上に絞り込んでいます。
- エ誤り。WHERE 点数 >= 80 は個々の得点が80点以上の行だけを対象にしてしまい,全科目の平均が80点以上という条件になりません。また GROUP BY の後ろに WHERE は書けません。