SELECT クラス名、 AVG (点数) FROM 試験結果
GROUP BY HAVING AVG() >= 600
SELECT クラス名、 AVG (点数) FROM 試験結果
WHERE BETWEEN '2014-04-01' AND '2015-03-31'
GROUP BY 57 HAVING AVG() >= 600
(正解)SELECT クラス名、 AVG (点数) FROM 試験結果
WHERE BETWEEN '2014-04-01' AND 2015-03-31'
GROUP BY クラス名 HAVING 点数 >= 600
SELECT クラス名、 AVG(点数) FROM 試験結果
WHERE 点数 >= 600
GROUP BY クラス名
HAVING (MAX(受験年月日) BETWEEN '2014-04-01' AND '2015-03-31')
WHERE句で受験年月日を2014年度(2014年4月1日から2015年3月31日まで)に絞り込み、
GROUP BY クラス名でクラスごとに集計しています。
HAVING AVG(点数) >= 600で平均点が600点以上のクラスだけを抽出しているため、問題文の条件を正確に満たしています。
受験年月日で絞り込むため、
WHERE句に
BETWEEN '2014-04-01' AND '2015-03-31'を指定する。
GROUP BY クラス名を使う。
HAVING AVG(点数) >= 600を指定する。
クラス名と
AVG(点数)を出力する。
GROUP BYの後に対象の列がなく、
HAVING AVG()の括弧内も空で文法エラー。
WHERE BETWEENの書き方が誤り(BETWEENの前に列名がない)、
HAVING 点数 >= 600は集計関数を使っていないため誤り。
WHERE 点数 >= 600で点数で絞り込んでしまい、平均点600点以上のクラス抽出にはならない。
HAVING句の条件も誤用。
WHERE句で行単位の絞り込み、
HAVING句でグループ化後の集計結果に対する条件指定を行います。
BETWEENを使う際に対象の列名を必ず明記し、文字列の引用符や括弧の閉じ忘れに注意しましょう。
HAVING句で
AVG(点数) >= 600と書くのですか?
HAVING句はグループ化後の集計結果に条件を付けるため、平均点のような集計関数を使った条件は
HAVINGで指定します。
WHERE句で日付範囲を指定する理由は?
WHERE句は集計前の行を絞り込むため、対象年度のデータだけを抽出してから集計する必要があるからです。

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
すぐに利用可能!