男女別最年長従業員の除外SQL

設問では「男女それぞれの最年長従業員を除く」全ての従業員を求めています。 ・最年長者とは生年月日が最も古い(最小である)従業員を指します。 ・主問合せの従業員 S1 に対し、同じ性別の最年長者の生年月日を求める相関副問合せを作成し、S1.生年月日 > (その性別の最小生年月日) と比較することで、各性別の最年長者を除外できます。 副問合せ内で WHERE S1.性別 = S2.性別 と相関条件を指定することで、S1 の性別に応じた単一の MIN(生年月日)(スカラ値)が返され、不等号比較が成立します。よって ウ が正解です。 GROUP BY S2.性別 を行うと男女2行の結果(複数行)が返されるため、単一値を期待するスカラ比較 > で構文・実行時エラーとなります。 副問合せの条件に S1.生年月日 > S2.生年月日 を含めてしまうと、最年長者の生年月日の取得条件として論理的に誤りとなります。 相関条件がなく GROUP BY も指定されていないため、全従業員中の最小生年月日が1つ返されるだけで、男女それぞれの判定になりません。

“従業員”表から,男女それぞれの最年長従業員を除く全ての従業員を取り出すSQL文とするために, a に入れる字句はどれか。ここで,“従業員”表の構造は次のとおりであり,実線の下線は主キーを表す。

従業員 (従業員番号, 従業員名, 性別, 生年月日)

sql
〔SQL文〕
SELECT 従業員番号, 従業員名 FROM 従業員 AS S1
  WHERE 生年月日 > ( a )
出典令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問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.性別