電子書籍の厳選無料作品が豊富!

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

で正解なのでしょうか?

選択問題で不備があり正解なしとあります。

A 回答 (3件)

>

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

間違っています。
    • good
    • 0

ACCESSでも使って、試すとわかります。



結果は#1さんのとおり、「1953のみ」
これは選択肢には無いため、問題として成立しませんでした。

示された選択肢に正解がある状態にするためには

(5)が HAVING COUNT(*)<=4 でないとダメです。
この場合、選択肢ウの「1954」「1953」「1943」になります。


問題作成者が意図してたのはどちらだったんでしょうね。
SQLが正しくて選択肢アが「1953」でなかったのか、
選択肢ウを選ばせたかったがSQL文が間違っていたのか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

NO.1さんの所に記載しているのですが

下記ページに載っている回答が分かりません

補足いただければ助かります。。。。

お礼日時:2012/02/13 13:56

社員表 全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だけです。
    • good
    • 0
この回答へのお礼

ありがとうございます
1943が2箇所で4つあるので
この様に思うのですが、
http://www.k4.dion.ne.jp/~type_f/SW_18S_AM/SW_18 …

の回答では
すべての生年が抽出されて
正解なしになっています。

上記ページが間違っているのでしょうか?

申し訳ありません、教えてもらえれば助かります

お礼日時:2012/02/13 13:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!