- 締切済み
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 で正解なのでしょうか? 選択問題で不備があり正解なしとあります。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jjon-com
- ベストアンサー率61% (1599/2592)
> http://www.k4.dion.ne.jp/~type_f/SW_18S_AM/SW_18S_AM_67.html > 上記ページが間違っているのでしょうか? 間違っています。
- bin-chan
- ベストアンサー率33% (1403/4213)
ACCESSでも使って、試すとわかります。 結果は#1さんのとおり、「1953のみ」 これは選択肢には無いため、問題として成立しませんでした。 示された選択肢に正解がある状態にするためには (5)が HAVING COUNT(*)<=4 でないとダメです。 この場合、選択肢ウの「1954」「1953」「1943」になります。 問題作成者が意図してたのはどちらだったんでしょうね。 SQLが正しくて選択肢アが「1953」でなかったのか、 選択肢ウを選ばせたかったがSQL文が間違っていたのか。
- jjon-com
- ベストアンサー率61% (1599/2592)
社員表 全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だけです。
お礼
ありがとうございます 1943が2箇所で4つあるので この様に思うのですが、 http://www.k4.dion.ne.jp/~type_f/SW_18S_AM/SW_18S_AM_67.html の回答では すべての生年が抽出されて 正解なしになっています。 上記ページが間違っているのでしょうか? 申し訳ありません、教えてもらえれば助かります
お礼
回答ありがとうございます NO.1さんの所に記載しているのですが 下記ページに載っている回答が分かりません 補足いただければ助かります。。。。