令和元年度春期 応用情報技術者試験 午前 問28

分野:データベース|実際に出題されたIPA過去問題

過去3年分の記録を保存している"試験結果"表から,2018年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧を取得するSQL文はどれか。ここで,実線の下線は主キーを表す。試験結果(学生番号,受験年月日,点数,クラス名)

  1.  SELECT クラス名, AVG(点数) FROM 試験結果 GROUP BY クラス名 HAVING AVG(点数) >= 600
  2.  SELECT クラス名, AVG(点数) FROM 試験結果 WHERE 受験年月日 BETWEEN '2018-04-01' AND '2019-03-31' GROUP BY クラス名 HAVING AVG(点数) >= 600
  3.  SELECT クラス名, AVG(点数) FROM 試験結果 WHERE 受験年月日 BETWEEN '2018-04-01' AND '2019-03-31' GROUP BY クラス名 HAVING 点数 >= 600
  4.  SELECT クラス名, AVG(点数) FROM 試験結果 WHERE 点数 >= 600 GROUP BY クラス名 HAVING (MAX(受験年月日) BETWEEN '2018-04-01' AND '2019-03-31')
解答・解説を見る

正解:イ

AI解説

要件は「2018年度のデータに限定」「クラスごとに平均」「平均600点以上に絞る」の三つである。行の絞り込み(2018年度=2018-04-01〜2019-03-31)はWHERE句、クラスごとの集計はGROUP BY句、集計結果(AVG)による絞り込みはHAVING句で行う。この役割分担を全て満たすのはイである。 ア: 誤り。WHERE句がなく3年分全ての記録が集計対象になるため、2018年度の平均にならない。 イ: 正しい。WHEREで2018年度の行に限定し、GROUP BYでクラス別に集計し、HAVING AVG(点数)>=600で平均600点以上のクラスに絞っている。 ウ: 誤り。HAVING句にグループ化していない列「点数」を単独で指定しており、文法的に不適切である(集計関数を使う必要がある)。 エ: 誤り。WHERE 点数>=600で600点以上の行だけを先に抽出してしまうため、平均点が実際より高く計算され、要件と異なる結果になる。 💡 「WHEREは集計前の行の条件、HAVINGは集計後のグループの条件」が鉄則。WHEREで点数を絞ってから平均を取る肢は定番のひっかけである。

出典:令和元年度 春期 応用情報技術者試験 午前 問28 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。
📱 演習アプリで解く(無料・登録不要・2,640問収録)

「データベース」分野の攻略ポイント

関係モデル・正規化・SQL・トランザクション管理・障害回復・データベース設計が中心です。計算問題は少なく、定義と手順を正確に覚えていれば確実に得点できる、いわば「取りこぼしてはいけない」分野です。特に正規形とACID特性は毎年のように形を変えて出ます。

データベースの攻略ポイントをすべて見る(要点5項目・ひっかけ3項目)→

同じ分野(データベース)の過去問