解説
次の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:
HAVING
句と
WHERE
句の違いは何ですか?
A:
WHERE
は集約前の行に条件をかけ、
HAVING
は集約後のグループに条件をかけます。
Q:
GROUP BY
で複数列を指定した場合はどうなりますか?
A: 指定した複数列の組み合わせごとにグループ化され、それぞれのグループで集約処理が行われます。
関連キーワード: SQL, GROUP BY, HAVING, 集約関数, 平均値, データベース, 条件指定