正答2
解説
正解は2です。
SQL(Structured Query Language)の集約関数とGROUP BY句の正しい使い方を問う問題です。
AVGやSUMなどの集約関数と、集約しない列を同時にSELECTするには、その列でグループ化する必要があります。
【選択肢別解説】
1:× GROUP BY句がないので、表全体が1つのグループになります。
注文日は行ごとに異なる値なので、AVG(数量)と並べて1行に表示できず、誤りになります。
2:○ 注文日ごとにグループ化し、グループごとの数量の平均を求めています。
SELECT句の注文日もGROUP BY句に含まれているので、正しい構文です。
3:× AVG(SUM(数量))のように、集約関数の中に集約関数を入れ子にすることは、標準SQLではできません。
4:× WHERE句には集約関数を書けません。
グループごとの集計結果で絞り込むには、GROUP BY句の後にHAVING SUM(数量) > 1000と書きます。
【ポイント】
WHEREはグループ化の前に行を絞り込み、HAVINGはグループ化の後にグループを絞り込みます。
SELECT句に書く非集約列は、GROUP BY句にも書く必要があります。