データベーススペシャリスト試験 2015年 午前207


過去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 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')

解説

過去3年分の記録から2014年度の平均点数600点以上のクラス名と平均点数を取得するSQL文【午前2 解説】

要点まとめ

  • 結論:2014年度の期間で絞り込み、クラスごとに平均点を計算し600点以上のクラスを抽出するSQL文はイです。
  • 根拠:WHERE句で受験年月日を2014年度に限定し、GROUP BYでクラス名ごとに集計、HAVING句で平均点600点以上を条件にしています。
  • 差がつくポイント:日付の範囲指定、GROUP BYの正しい記述、HAVING句で集計関数を使った条件指定が正確かどうかが重要です。

正解の理由

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

よくある誤解

  • WHERE句の書き方やBETWEENの使い方を誤り、日付範囲が正しく指定できていないことが多いです。
  • HAVING句で集計関数を使わずに単純な列名で条件を指定し、正しく絞り込めないケースがあります。

解法ステップ

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

選択肢別の誤答解説ステップ

  • ア:GROUP BYの後に対象の列がなく、HAVING AVG()の括弧内も空で文法エラー。
  • :正解。日付範囲指定、グループ化、平均点条件が正しく記述されている。
  • ウ:WHERE BETWEENの書き方が誤り(BETWEENの前に列名がない)、HAVING 点数 >= 600は集計関数を使っていないため誤り。
  • エ:WHERE 点数 >= 600で点数で絞り込んでしまい、平均点600点以上のクラス抽出にはならない。HAVING句の条件も誤用。

補足コラム

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

FAQ

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

関連キーワード: SQL, 集計関数, HAVING句, GROUP BY, 日付範囲指定, 平均点, データ抽出
← 前の問題へ次の問題へ →

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