戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2015年 午前2 問07


問題文

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

選択肢

ア:
SELECT クラス名, AVG(点数) FROM 試験結果
    GROUP BY クラス名 HAVING AVG(点数) >= 600
イ:
SELECT クラス名, AVG(点数) FROM 試験結果
    WHERE 受験年月日 BETWEEN '2014-04-01' AND '2015-03-31'
    GROUP BY クラス名 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')

🔒 解説は解答すると表示されます

年度別平均点の集計【午前2解説】

正解の理由

イのSQL文は、まずWHERE句で受験年月日を2014年度(2014年4月1日から2015年3月31日まで)に絞り込み、GROUP BY クラス名でクラスごとに集計しています。
その後、HAVING AVG(点数) >= 600で平均点が600点以上のクラスだけを抽出しているため、問題文の条件を正確に満たしています。

解法ステップ

  1. 2014年度の期間を受験年月日で絞り込むため、WHERE句にBETWEEN '2014-04-01' AND '2015-03-31'を指定する。
  2. クラスごとに平均点を計算するため、GROUP BY クラス名を使う。
  3. 平均点が600点以上のクラスを抽出するため、HAVING AVG(点数) >= 600を指定する。
  4. SELECT句でクラス名とAVG(点数)を出力する。

選択肢別の誤答解説

  • ア:WHERE句がないので、過去3年分すべての記録でクラスごとの平均点を求めてしまい、2014年度だけの平均点にならない。
  • イ:正解。日付範囲指定、グループ化、平均点条件が正しく記述されている。
  • ウ:HAVING 点数 >= 600は集計関数を使っておらず、グループごとの平均点の条件にならないため誤り。
  • エ:WHERE 点数 >= 600で600点以上の行だけに絞ってから平均を求めており、平均点600点以上のクラス抽出にはならない。HAVING句の条件も年度の絞り込みになっていない。

よくある誤解

  • 年度で絞り込むWHERE句を忘れると、過去3年分すべての記録で平均を求めてしまいます。
  • HAVING句で集計関数を使わずに単純な列名で条件を指定し、正しく絞り込めないケースがあります。

補足コラム

SQLで集計結果に条件を付ける場合はWHERE句で行単位の絞り込み、HAVING句でグループ化後の集計結果に対する条件指定を行います。
また、日付の範囲指定はBETWEENを使う際に対象の列名を必ず明記し、文字列の引用符や括弧の閉じ忘れに注意しましょう。

FAQ

Q: なぜHAVING句でAVG(点数) >= 600と書くのですか?
A: HAVING句はグループ化後の集計結果に条件を付けるため、平均点のような集計関数を使った条件はHAVINGで指定します。
Q: WHERE句で日付範囲を指定する理由は?
A: WHERE句は集計前の行を絞り込むため、対象年度のデータだけを抽出してから集計する必要があるからです。

関連キーワード: SQL, 集計関数、HAVING句、GROUP BY, 日付範囲指定、平均点、データ抽出
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について