データベーススペシャリスト 2011年 午前2 問06
問題文
次の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
の集約単位を理解せず、単一の平均値を選ぶミスが多いです。
解法ステップ
- SQL文の
GROUP BY
句で集約単位が「グループ」であることを確認する。 HAVING COUNT(*) > 1
でメンバー数が2人以上のグループを抽出する条件を理解する。- 会員表のデータから各グループの人数を数える。
- 条件を満たすグループの年齢の平均を計算する。
- 計算結果と選択肢の表を照合し、該当するものを選ぶ。
選択肢別の誤答解説
- ア:全体の平均(36)を示しているが、グループごとの平均ではないため誤り。
- イ:40はグループCの平均年齢だが、グループBも条件を満たすため不完全。
- ウ:グループB(30)とC(40)の平均年齢が正しく表示されており正解。
- エ:グループA(60)も含まれているが、メンバー数が1人なので
HAVING
条件に反する。
補足コラム
HAVING句は
GROUP BYで集約した後のグループに対して条件を指定するために使います。
WHERE句は集約前の行に対する条件指定であり、集約結果に条件を付ける場合は
HAVINGを使う点が重要です。
FAQ
Q:
A:
HAVING句と
WHERE句の違いは何ですか?
A:
WHEREは集約前の行に条件をかけ、
HAVINGは集約後のグループに条件をかけます。
Q:
A: 指定した複数列の組み合わせごとにグループ化され、それぞれのグループで集約処理が行われます。
GROUP BYで複数列を指定した場合はどうなりますか?
A: 指定した複数列の組み合わせごとにグループ化され、それぞれのグループで集約処理が行われます。
関連キーワード: SQL, GROUP BY, HAVING, 集約関数、平均値、データベース、条件指定

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

