平成31年春期試験問題 午前問28
問28解説へ
過去3年分の記録を保存している"試験結果"表から,2018年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧を取得するSQL文はどれか。ここで,実線の下線は主キーを表す。
試験結果(学生番号,受験年月日,点数,クラス名)
試験結果(学生番号,受験年月日,点数,クラス名)
広告
解説
- BETWEEN句による受験年月日の絞り込みが行われておらず、全期間を対象に集計を行っているため誤りです。
- 正しい。このSQL文は以下の手順で処理されていきます。
- WHERE句とBETWEEN句の組合せで受験年月日が2018年度の行だけに絞り込む。
- 「GROUP BY クラス名」でグループ化し、2018年度の試験結果がクラスごとにグループ化された状態にする。
- 平均点数が600点以上のグループを抽出する。グループごとの点数の平均はAVG(点数)で得られるため「HAVING AVG(点数) >= 600」で、この条件に合致するグループのみを抽出する。
- 「SELECT クラス名,AVG(点数)」で、クラス名と点数の平均値を表示する。
- HAVING句にはグループ化に指定されている列または集計関数しか指定できません。本肢のSQL文はグループ化されていない"点数"列を指定しているため構文エラーになります。
- SQL文はWHERE句→GROUP BY句の順で実行されます。本肢のSQL文は、「WHERE 点数 >= 600」によって600点以上の行だけを選択した後にグループ化が行われることになります。これでは点数が600点以上の行だけを対象に集計することになるため、正しい平均点数が得られません。
広告