過去3年分の記録を保存している“試験結果”表から,2018年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧を取得するSQL文はどれか。
ここで,実線の下線は主キーを表す。
試験結果(学生番号,受験年月日,点数,クラス名) ※下線(主キー):学生番号,受験年月日
正答2
解説
正解は2です。
「2018年度のデータだけ」を対象に、クラスごとの平均点を求め、平均点が600点以上のクラスを取り出す必要があります。
行の絞込みはWHERE句、グループ単位の条件はHAVING句で書きます。
【選択肢別解説】
1:× 年度で絞り込む条件がありません。
過去3年分すべての試験結果で平均をとってしまうので、2018年度の平均点になりません。
2:○ WHERE句で受験年月日を2018年4月1日から2019年3月31日に絞り、クラス名でグループ化しています。
HAVING句でAVG(点数)が600以上のグループだけを取り出しており、要件どおりです。
3:× HAVING句の条件が「点数 >= 600」になっています。
HAVING句にはグループ単位の値を書く必要があり、個々の行の点数ではクラスの平均点で判定できません。
4:× WHERE句で600点以上の行だけに絞ってから平均をとっているので、平均点が高く出てしまいます。
また、年度の条件を最新の受験日だけで判定しており、2018年度のデータに限定できていません。
【ポイント】
WHEREはグループ化の前に行を絞り、HAVINGはグループ化の後にグループを絞ります。
平均などの集計結果に条件を付けるときはHAVING句を使うと覚えましょう。