IPA公式正解:ウ SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
※ 正解はIPA公表の解答です。解説は当サイトが生成AIを用いて作成しています。誤りにお気づきの場合はお問い合わせください。
【解説】正解は選択肢【ウ】です。「男女それぞれの最年長社員を除く」ためには、外側の社員S1と同じ性別の社員グループ内での最年長者(MIN(生年月日))を相関副問合せで求め、生年月日がそれより大きい(若い)社員を抽出します。
【詳細解説】■ 本問の核心・解法のポイント
生年月日は値が小さい(古い日付)ほど年長者となります。したがって、「最年長社員」の生年月日は `MIN(生年月日)` で表されます。
「男女それぞれの最年長社員を除く」ということは、各社員について「自分と同じ性別の社員の中での最小の生年月日」よりも大きい(若い)生年月日を持つレコードを抽出することを意味します。
主問合せの各行(S1)に対して、その社員と同じ性別(`S1.性別 = S2.性別`)の最年長者の生年月日をスカラ副問合せで1つ取得し、`WHERE 生年月日 > (...)` で比較する必要があります。
・各選択肢の徹底解説:
・ア:不適切です。GROUP BY S2.性別 を行うと、男女それぞれのMIN(生年月日)として複数行(2行)が返されるため、比較演算子 `>` で直接単一の値として比較できずエラーになります。
・イ:不適切です。条件に `S1.生年月日 > S2.生年月日 OR ...` が含まれており、意図した性別ごとの最年長者の生年月日を取得できません。
・【選択肢ウ★】:適切です。相関副問合せ `WHERE S1.性別 = S2.性別` により、S1と同じ性別の社員の中での `MIN(生年月日)`(単一の値)が返されるため、最年長者を除くという条件が正しく満たされます。
・エ:不適切です。FROM句に別名S2が定義されておらず構文エラーになる上、GROUP BYを使用すると複数行が返るため比較演算子 `>` では評価できません。
よって正解はウです。