ア.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')
正解
イ. SELECT クラス名, AVG(点数) FROM 試験結果 WHERE 受験年月日 BETWEEN '2018-04-01' AND '2019-03-31' GROUP BY クラス名 HAVING AVG(点数) = 600
解説
SQL の WHERE(行の絞り込み)と GROUP BY・HAVING(グループ化後の集計と絞り込み)の正しい使い分けを問う問題である。まず WHERE で 2018 年度(2018-04-01〜2019-03-31)の行だけに絞り、クラス名で GROUP BY して平均点を集計し、グループ単位の集計結果に対する条件は HAVING AVG(点数) = 600 で絞り込むのが正しい。これらをすべて満たすイが正解である。