応用情報技術者平成31年春期 午前問28

問28

過去3年分の記録を保存している"試験結果"表から,2018年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧を取得するSQL文はどれか。ここで,実線の下線は主キーを表す。

 試験結果(学生番号受験年月日,点数,クラス名)
  • 28a.png/image-size:404×36
  • 28i.png/image-size:404×57
  • 28u.png/image-size:404×58
  • 28e.png/image-size:404×101

分類

テクノロジ系 » データベース » データ操作

正解

解説

  • BETWEEN句による受験年月日の絞り込みが行われておらず、全期間を対象に集計を行っているため誤りです。
  • 正しい。このSQL文は以下の手順で処理されていきます。
    1. WHERE句とBETWEEN句の組合せで受験年月日が2018年度の行だけに絞り込む。
    2. 「GROUP BY クラス名」でグループ化し、2018年度の試験結果がクラスごとにグループ化された状態にする。
    3. 平均点数が600点以上のグループを抽出する。グループごとの点数の平均はAVG(点数)で得られるため「HAVING AVG(点数) >= 600」で、この条件に合致するグループのみを抽出する。
    4. 「SELECT クラス名,AVG(点数)」で、クラス名と点数の平均値を表示する。
  • HAVING句にはグループ化に指定されている列または集計関数しか指定できません。本肢のSQL文はグループ化されていない"点数"列を指定しているため構文エラーになります。
  • SQL文はWHERE句→GROUP BY句の順で実行されます。本肢のSQL文は、「WHERE 点数 >= 600」によって600点以上の行だけを選択した後にグループ化が行われることになります。これでは点数が600点以上の行だけを対象に集計することになるため、正しい平均点数が得られません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop