戦国IT

情報処理技術者試験の過去問対策サイト

データベーススペシャリスト試験 2011年 午前206


次のSQL文によって “会員” 表から新たに得られる表はどれか。
問題画像選択肢画像
(正解)

解説

次のSQL文によって “会員” 表から新たに得られる表はどれか【午前2 解説】

要点まとめ

  • 結論:SQL文は「グループ」ごとに年齢の平均を計算し、2人以上のグループのみ結果に含めるため、選択肢ウが正解です。
  • 根拠:
    GROUP BY グループ
    でグループ単位に集約し、
    HAVING COUNT(*) > 1
    でメンバー数が2以上のグループを抽出しています。
  • 差がつくポイント:
    HAVING
    句の役割と
    GROUP BY
    の集約単位を正しく理解し、単純な平均値と混同しないことが重要です。

正解の理由

SQL文は「会員」表の「グループ」ごとに年齢の平均を計算しています。
  • GROUP BY グループ
    により、グループA、B、Cの3つに分けられます。
  • HAVING COUNT(*) > 1
    でメンバー数が1人以下のグループは除外されます。
  • グループAは1人(60歳)、Bは2人(20歳、40歳)、Cは3人(30歳、40歳、50歳)です。
  • よって、グループBとCのみが対象となり、それぞれの平均はBが30、Cが40となります。
  • これに該当するのは選択肢ウの表です。

よくある誤解

  • HAVING
    句を使わずに全体の平均を求めると誤答になります。
  • GROUP BY
    の集約単位を理解せず、単一の平均値を選ぶミスが多いです。

解法ステップ

  1. SQL文の
    GROUP BY
    句で集約単位が「グループ」であることを確認する。
  2. HAVING COUNT(*) > 1
    でメンバー数が2人以上のグループを抽出する条件を理解する。
  3. 会員表のデータから各グループの人数を数える。
  4. 条件を満たすグループの年齢の平均を計算する。
  5. 計算結果と選択肢の表を照合し、該当するものを選ぶ。

選択肢別の誤答解説

  • ア:全体の平均(36)を示しているが、グループごとの平均ではないため誤り。
  • イ:40はグループCの平均年齢だが、グループBも条件を満たすため不完全。
  • :グループB(30)とC(40)の平均年齢が正しく表示されており正解。
  • エ:グループA(60)も含まれているが、メンバー数が1人なので
    HAVING
    条件に反する。

補足コラム

HAVING
句は
GROUP BY
で集約した後のグループに対して条件を指定するために使います。
WHERE
句は集約前の行に対する条件指定であり、集約結果に条件を付ける場合は
HAVING
を使う点が重要です。

FAQ

Q:
HAVING
句と
WHERE
句の違いは何ですか?
A:
WHERE
は集約前の行に条件をかけ、
HAVING
は集約後のグループに条件をかけます。
Q:
GROUP BY
で複数列を指定した場合はどうなりますか?
A: 指定した複数列の組み合わせごとにグループ化され、それぞれのグループで集約処理が行われます。

関連キーワード: SQL, GROUP BY, HAVING, 集約関数, 平均値, データベース, 条件指定
← 前の問題へ次の問題へ →

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