平成31年 春期 応用情報技術者 午前 問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年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧なので、受験年月日が2018年度(2018年4月1日〜2019年3月31日)であることと、クラス毎の平均点(AVG())が600点以上であることが条件になるので、求めるSQL文は、
 SELECT クラス名, AVG(点数) FROM 試験結果
   WHERE 受験年月日 BETWEEN ‘2018-04-01’ AND ‘2019-03-31’
   GROUP BY クラス名 HAVING AVG(点数) >= 600

(イ)になります。


キーワード
・HAVING

キーワードの解説
  • HAVING
    GROUP BY句によってグループ化されたデータに対し、検索条件を指定し絞り込むことを目的としたSQLの句です。
    検索条件の絞り込みというとWHRE句が使われますが、SQL文の評価はWHERE句、GROUP BY句の順で行われるため、GROUP BY句によるグループ化した結果を利用する集計関数に対してWHERE句による条件指定を行うことはできないため、HAVING句を使用します。

もっと、「HAVING」について調べてみよう。

戻る 一覧へ 次へ