• 締切済み

SQL問題、正解なし?

H18 春 ソフトウェア 技術者試験 問67 (1)SELECT DISTINCT S1.生年 (2)FROM 社員 AS S1、社員 AS S2 (3)WHERE S1.生年>=S2.生年 (4)GROUP BY S1.生年 (5)HAVING COUNT(*)<=3 社員 社員番号  社員名  生年               1943               1968               1970               1943               1953               1954               1962               1975               1961               1957 ※社員番号・社員名は端折りました。 (2):社員テーブルから 全く同じ内容をS1、S2でテーブル名を変更 (3):同じ内容を比較していく S1.生年以上をひとつずつ比較して (4)・(5)でグループ化して3つ以下であれば (1):DISTINCTで重複を削除して出力 1943 2つ 1953 3つ 出力結果 生年 1943 1953 で正解なのでしょうか? 選択問題で不備があり正解なしとあります。

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

> http://www.k4.dion.ne.jp/~type_f/SW_18S_AM/SW_18S_AM_67.html > 上記ページが間違っているのでしょうか? 間違っています。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

ACCESSでも使って、試すとわかります。 結果は#1さんのとおり、「1953のみ」 これは選択肢には無いため、問題として成立しませんでした。 示された選択肢に正解がある状態にするためには (5)が HAVING COUNT(*)<=4 でないとダメです。 この場合、選択肢ウの「1954」「1953」「1943」になります。 問題作成者が意図してたのはどちらだったんでしょうね。 SQLが正しくて選択肢アが「1953」でなかったのか、 選択肢ウを選ばせたかったがSQL文が間違っていたのか。

moyamoya2
質問者

お礼

回答ありがとうございます NO.1さんの所に記載しているのですが 下記ページに載っている回答が分かりません 補足いただければ助かります。。。。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

社員表 全10行のうち,1943は2箇所に記録されているので, 1行目の1943に対して「WHERE S1.生年 >= S2.生年」が2件, 4行目の1943に対して「WHERE S1.生年 >= S2.生年」が2件, よって「GROUP BY S1.生年」すれば   1943 4つ   1953 3つ となって「HAVING COUNT(*) <= 3」を満たすのは 1953だけです。

moyamoya2
質問者

お礼

ありがとうございます 1943が2箇所で4つあるので この様に思うのですが、 http://www.k4.dion.ne.jp/~type_f/SW_18S_AM/SW_18S_AM_67.html の回答では すべての生年が抽出されて 正解なしになっています。 上記ページが間違っているのでしょうか? 申し訳ありません、教えてもらえれば助かります

関連するQ&A