問28
過去3年分の記録を保存している“試験結果”表から、2018年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧を取得するSQL文はどれか。ここで、実線の下線は主キーを表す。
試験結果 (学生番号, 受験年月日, 点数, クラス名)
ア SELECT クラス名, AVG(点数), FROM 試験結果
GROUP BY クラス名 HAVING AVG(点数) >= 600
イ SELECT クラス名, AVG(点数), FROM 試験結果
WHERE 受験年月日 BETWEEN ‘2018-04-01’ AND ‘2019-03-31’
GROUP BY クラス名 HAVING AVG(点数) >= 600
ウ SELECT クラス名, AVG(点数), FROM 試験結果
WHERE 受験年月日 BETWEEN ‘2018-04-01’ AND ‘2019-03-31’
GROUP BY クラス名 HAVING 点数 >= 600
エ SELECT クラス名, AVG(点数), FROM 試験結果
WHERE 点数 >= 600
GROUP BY クラス名
HAVING (MAX(受験年月日)
BETWEEN ‘2018-04-01’ AND ‘2019-03-31’)
正解
イ
解説
ア 2018年度という受験年月日の条件がない。
イ 正しい。
「SELECT クラス名, AVG(点数), FROM 試験結果
WHERE 受験年月日 BETWEEN ‘2018-04-01’ AND ‘2019-03-31’
GROUP BY クラス名 HAVING AVG(点数) >= 600」
の意味は、以下のとおりである。
「試験結果表から、受験年月日が2018年4月1日から2019年3月31日までのデータを取得し、クラス名でグルーピングして、その中で平均点数が600点以上のグループを抜き出し取得し、クラス名と平均点を表示する。」
ウ HAVING句では、GROUP BYで指定された列か、集計関数しか指定できず、構文エラーになる。
エ WHERE 点数 >= 600 によって、試験結果表から点数が600点以上のデータが取得され、正しい結果が得られない。