DBデータベーススペシャリスト試験 午前Ⅱ
平成26年度春期 データベーススペシャリスト 午前Ⅱ 問10
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題
選択肢
- アSELECT MIN(生年月日) FROM 社員 AS S2 GROUP BY S2.性別
- イSELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別
- ウSELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
- エSELECT MIN(生年月日) FROM 社員 GROUP BY S2.性別
解き方のヒントを見る
抽出条件と結果を対応づける視点
SQLの抽出結果を考えるときは、文全体を一度に判断せず、条件がどの行に関係し、各条件の組み合わせが結果の範囲にどう影響するかを順に整理します。特に条件同士の関係と対象列を分けて見ます。
この問題で問われていること
一つの条件だけに注目せず、抽出対象を決める部分と、条件を組み合わせる部分を分けて読み、各条件がどの行の採否に関係するかという対応関係だけを丁寧に確認してください。
視点
抽出条件を読む際は、対象となる行の集合、条件が参照する値、複数条件の結び付きという三つの観点を切り分けます。文中の記号や順序を急いで解釈せず、どの情報が判定材料として使われるかを整理するのが有効です。
確認ポイント
- 条件が参照している列や値を整理する
- 条件同士の関係を個別に確認する
- 各条件が結果の対象範囲に関係するかを見る
正解と解説を見る
正解
ウ
解説
生年月日は値が小さいほど年齢が高いことに注意します。各社員と同じ性別の社員だけを対象に生年月日の最小値を求め、それより後の日付の社員を選べば、男女それぞれの最年長社員を除外できます。
理由
最年長社員は、同じ性別の中で生年月日が最も早い、つまり生年月日が最小の社員です。外側の社員S1と同じ性別の社員S2に限定してMIN(生年月日)を求め、S1の生年月日がその値より後である場合だけ取り出します。これにより、男女それぞれの最年長社員だけが除外されます。
比較
サブクエリは外側のS1の性別を参照する相関サブクエリである必要があります。GROUP BYだけで複数行を返す構造や、性別以外の社員まで比較対象に含める条件、存在しない別名を使う記述では、設問の抽出条件を正しく実現できません。
選択肢ア
これは不正解だよ。性別ごとにMIN(生年月日)を求める意図はありますが、外側のS1と性別で結び付いていません。またGROUP BYによって複数行の結果になるため、括弧内の単一値と比較するこのWHERE句には適しません。
選択肢イ
これは不正解だよ。外側のS1と内側のS2について、生年月日の比較または性別一致を条件にしているため、同じ性別の全社員に限定されません。異なる性別の社員も条件に含まれ得るので、男女別の最年長者を基準にできません。
選択肢ウ(正解)
これは正解だよ。S1とS2の性別を一致させてから、S2の生年月日の最小値を求めるため、S1と同じ性別における最年長社員の生年月日を基準にできます。S1の生年月日がそれより後の社員だけを抽出するので、男女それぞれの最年長社員を除けます。
選択肢エ
これは不正解だよ。FROM句でS2という別名を定義していないのにGROUP BYでS2.性別を参照しており、表別名の指定が不整合です。さらに外側のS1と性別を関連付けていないため、設問の男女別の比較条件も表現できません。
学習のポイント
相関サブクエリと集約関数を組み合わせ、グループ別の最小値を比較する方法を学びます。
出典:独立行政法人 情報処理推進機構(IPA)平成26年度春期 データベーススペシャリスト試験 午前Ⅱ 問10(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針