DBデータベーススペシャリスト試験 午前Ⅱ
平成23年度特別 データベーススペシャリスト 午前Ⅱ 問6
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- ア図ア
- イ図イ
- ウ図ウ
- エ図エ
解き方のヒントを見る
SQL抽出条件を読むための着眼点
SQLの抽出条件と結果の対応を考えるときは、文の各条件がどの対象を判定しているかを整理し、条件同士の関係と適用される段階に注目して、順序立てて確認します。
この問題で問われていること
一つの確認に絞り、抽出条件が対象のどの属性や行に対して評価されるものかを、文全体の構造と照らして整理してみましょう。
視点
SQL文を読む際は、対象を選ぶ部分と条件を判定する部分の役割を分けて捉えます。条件のまとまりごとに、何を対象に評価するのかを言葉で置き換え、結果との対応を落ち着いて確認しましょう。
確認ポイント
- 各条件が参照している対象や属性を整理する
- 条件のまとまりと文全体の構造を対応づける
- 結果に含まれる対象を条件ごとの観点で確認する
正解と解説を見る
正解
ウ
解説
GROUP BY グループで同じグループの会員をまとめ、HAVING COUNT(*) > 1で会員数が2人以上のグループだけを残す。その各グループの年齢平均が結果となる。
理由
グループBの年齢は20歳と40歳なので、平均は (20歳+40歳)÷2人=30歳です。グループCの年齢は30歳、40歳、50歳なので、平均は (30歳+40歳+50歳)÷3人=40歳です。グループAは1人だけなので、COUNT(*) > 1を満たさず結果から除かれます。したがって、結果は30と40の2行です。
比較
SELECT AVG(年齢)はグループごとの平均年齢を求め、GROUP BY グループによってグループ単位の行を作ります。HAVING COUNT(*) > 1は、集計後の各グループについて人数が2人以上かを判定します。会員全体の平均や個々の年齢をそのまま出す処理ではありません。
選択肢ア
これは不正解だよ。図アはAVG(年齢)の値を36だけ示していますが、SQLはグループ別に集計し、人数が2人以上のグループを残します。該当する複数グループの平均を1つにまとめる処理ではないため、結果の行数と値の構成が設問の条件と一致しません。
選択肢イ
これは不正解だよ。図イはAVG(年齢)の値を40だけ示しています。40という平均値だけを持つグループがあっても、SQLは条件を満たす各グループを別々に出力します。複数の対象グループのうち一方だけを残す表なので、GROUP BYとHAVINGの結果とは一致しません。
選択肢ウ(正解)
これは正解だよ。グループBは (20歳+40歳)÷2人=30歳、グループCは (30歳+40歳+50歳)÷3人=40歳です。どちらもCOUNT(*) > 1を満たします。一方、グループAは1人なので除外され、結果はAVG(年齢)が30と40の2行になります。
選択肢エ
これは不正解だよ。図エは60、30、40という年齢を並べていますが、SQLのSELECT項目はAVG(年齢)であり、個々の会員の年齢を出力しません。また、グループAの60歳は人数が1人でHAVING条件を満たさないため、結果に含めることはできません。
学習のポイント
GROUP BY、HAVING、COUNT、AVGの処理順と結果行の単位を理解する。
出典:独立行政法人 情報処理推進機構(IPA)平成23年度特別 データベーススペシャリスト試験 午前Ⅱ 問6(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針