• 締切済み

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

  • SQLの問題です。

    以下のような二つのテーブルがあります。 社員テーブル 社員番号 社員氏名 1     花子 2     太郎 所属テーブル 社員番号 所属番号 1     10 1     20 2     30 欲しいのは以下の結果です。 1 花子 2 太郎 以下のSQLを実行すると、 SELECT distinct a.社員番号, a.社員氏名, b.所属番号 FROM 社員 a,所属 b where a.社員番号 = b.社員番号 order by 所属番号 1 花子 1 花子 2 太郎 となってしまいます。 先に述べたとおりの結果を取得するにはどういうSQLを書いたらいいでしょうか? お知恵を貸してください。宜しくお願いします。 Oracle8iを使用しています。   

  • 平成20年 春期 基本情報技術者 午前 問58 の解説

    平成20年 春期 基本情報技術者 午前 問58 の問題の解説をお願い致したく思っております。 どうしても、なぜ『エ』が不正解なのか、分かりません。 宜しくお願い致します。 ---------- 問58 “社員”表から,職務がプログラマである社員が5人未満の部署の部署コードを探すSQL文として,適切なものはどれか。ここで,“社員”表は次の構造であり,各列にはナル値は含まれないものとする。 社員(社員番号,社員名,部署コード,職務) ア SELECT DISTINCT 部署コード FROM 社員 S1   WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 S2         WHERE S1.部署コード = S2.部署コード         AND S2.職務 = 'プログラマ') イ SELECT DISTINCT 部署コード FROM 社員 S1   WHERE 5 < (SELECT COUNT(S2.社員番号) FROM 社員 S2         WHERE S1.部署コード = S2.部署コード         AND S2.職務 <> 'プログラマ') ウ SELECT DISTINCT 部署コード FROM 社員 S1   WHERE EXISTS (SELECT * FROM 社員 S2         WHERE S1.部署コード = S2.部署コード         AND S2.職務 = 'プログラマ')   GROUP BY S1.部署コード HAVING COUNT(*) < 5 エ SELECT DISTINCT 部署コード FROM 社員 S1   WHERE S1.部署コード IN (SELECT S2.部署コード FROM 社員 S2         WHERE S1.部署コード = S2.部署コード         AND S2.職務 = 'プログラマ'         GROUP BY S2.部署コード HAVING COUNT(*) < 5)

  • SQL文を教えてください。

    社員テーブルと障害テーブルA、Bがあります。 社員テーブル(社員ID、発見者名、・・・etc) 障害テーブルA(障害番号、発生日、・・・etc) 障害テーブルB(事象、ステータス、対応内容、・・・etc) 社員ID、障害番号、事象、ステータスのSELECT結果を 一つのcsvファイルとして取得するプログラムを作成したいのです。 「複数のテーブルから」「任意の」列を指定して、 検索結果を「csvに出力」する方法がどうしても分かりません。 どのようなSQLになるでしょうか? うまく伝わっているでしょうか? よろしくお願いします。

  • SQL文を教えてください。

    社員テーブルと障害テーブルA、Bがあります。 社員テーブル(社員ID、発見者名、・・・etc) 障害テーブルA(障害番号、発生日、・・・etc) 障害テーブルB(事象、ステータス、対応内容、・・・etc) 社員ID、障害番号、事象、ステータスのSELECT結果を 一つのcsvファイルとして取得するプログラムを作成したいのです。 「複数のテーブルから」「任意の」列を指定して、 検索結果を「csvに出力」する方法がどうしても分かりません。 どのようなSQLになるでしょうか? うまく伝わっているでしょうか? よろしくお願いします。

  • 簡単なSQLに関して

    初歩的なSQLの質問で申し訳ありません。 教えて下さい。 下記のような、ある2つの異なる名前の同項目のテーブルが存在します。 《テーブル》 Aテーブル   社員番号、日付、内容 Bテーブル  社員番号、日付、内容  ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 どのようなSQLを書けば良いでしょうか?? 尚、テーブルに関しては、諸事情であえて2つに分けてあります。 よろしくお願いします。

  • SQL問題で詰まっています;

    こんにちわ、SQL問題が解けなくて悩んでます よろしくお願いします 次のような関係データベースがある。地区内には複数のスクールがあり、各スクールに複数の講座がある。受講生は複数の講座の受講が可能であり、異なったスクールの講座を受講する場合もある {受講生表}(J) | 受講生番号 | スクール番号 | 講座ID | {スクール表}(S) | スクール番号 | スクール名 | 講師数 | 地区コード | {地区表}(T) | 地区コード | 地区名 | 【問1】 スクールごとに受講整数を集計した下記のようなスクール別受講状況表をビューとして作る。そのためのSQL文の( a ) ( b )に入れる正しい答えを書きなさい。ここで、受講生とは、受講生の延べ人数である。 | スクール名 | 地区名 | 受講生数 | 講師数 | CREATE VIEW スクール別受講状況表(スクール名、地区名、受講生数、講師数) AS SELECT ( a )  FROM 受講生表J・スクール表S・地区表T WHERE  Jスクール番号=Sスクール番号 AND S地区コード=T地区コード GROUP BY ( b ) 【問2】 得られたスクール別受講状況表は次の通りとする スクール名=(1) 地区名=(2) 受講生数=(3) 講師数=(4) | (1) | (2) | (3) | (4) | | 第一 | A | 100 | 03 | | 第二 | C |2,000| 10 | | 第三 | C |1,000| 10 | | 第四 | B | 200 | 03 | | 第五 | B |1,000| 03 | | 第六 | B | 300 | 03 | | 第七 | A | 200 | 05 | | 第八 | C | 60 | 10 | | 第九 | D | 20 | 10 | | 第十 | D | 15 | 10 | |第十一| A | 20 | 02 | |第十二| B | 10 | 03 | 次のSQL文の結果は1件であった。そのときのSUM(講師数)の値はいくらになるか。ここでSQL文の句は、FROM句、WHERE句、GROUP BY句、HAVING句、SELECT句の順に適用されるものとする。 続きコメントに

  • SQLでの抽出条件

    SQL初心者です。初歩的な質問だと思いますが、ご教授願います。 以下のような2つのテーブルがあります。 【テーブルA】 グループ 社員番号 A 1 A 2 A 3 B 4 B 5 B 6 C 7 C 8 D 9 D 1 【テーブルB】 社員番号 1 9 テーブルBの社員番号と一致する場合、テーブルAをグループ単位で抽出しないようにしたいです。  ・グループAは社員番号1が一致するため抽出しない。  ・グループDは社員番号1と9が一致するため抽出しない。 【取得結果】 グループ 社員番号 B 4 B 5 B 6 C 7 C 8 説明が分かりづらくて申し訳ありませんが、よろしくお願い致します。

  • テーブルのマージSQLに関して

    初歩的なSQLの質問で申し訳ありません。 以前にも同じような内容で投稿させて頂きましたが、教えて下さい。 下記のような、ある異なる名前の同項目を持つ2つのテーブルが存在します。 《テーブル》 Aテーブル   社員番号、日付、内容、所属、時間、結果 Bテーブル  社員番号、日付、内容、理由  ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 以前に以下のようなUNIONを教えてもらいましたが、所属、時間、結果、理由という 項目全てを出力するとした場合、どのように記載すれば良いでしょうか? UNIONの場合、項目が異なるとエラーとなってしまうかと、、、 《UNIONのSQL》 SELECT * FROM ( SELECT 社員番号, 日付, 内容 FROM Aテーブル UNION SELECT 社員番号, 日付, 内容 FROM Bテーブル ) ORDER BY 日付, 社員番号, 内容 教えて下さい。 よろしくお願いします。

  • ASP + SQLにて

    お世話になっております。 このたびASPを使用し、SQL Serverへデータをいれ管理プログラムを作成しているのですが、一部データの取り出しがわからないのでご質問させていただきます。 SQL文を発行する際に、 strSQL = "select * from table1 left join table2 on table1.社員ID = table2.ID order by table1.ID desc" としております。 構造として table1にはID,日付,内容,社員IDがありまして table2にはID,社員名があります。 上記のSQL文を実行し、 <% response.write objRS("社員名") %> として社員名を出力しているのですが、 そのときtable1のIDを出力しようとして <% response.write objRS("ID") %> としたらtable2のIDが出力されてしまいました。 table1のIDを出力する方法はないのでしょうか? よろしくお願いいたします。

  • my sql について

    こんにちは。 my sql 初心者です。 データをcsv形式でエクスポートする際に問題があり質問です。 商品管理番号 サイズ カラー A S ブルー A M イエロー B S ブルー B M イエロー B L レッド C S ブルー C M ホワイト というデータがあったとします。 ※上記はデータの一部です。実際はもっと文字数もサイズカラーも多いです。 このデータを使ってビューを作成します。 -------------------------------------------------------------------------------- CREATE VIEW item_v_tab AS SELECT id, CONCAT('size:',サイズ,'#','color:',カラー,'=',商品管理番号,'&')AS subcode, 商品管理番号 FROM zaiko; -------------------------------------------------------------------------------- この時にデータ型はmediumtextとなります。 次に、 -------------------------------------------------------------------------------- SELECT id, 商品管理番号, group_concat(distinct subcode order by subcode ASC separator '\n') as subcode FROM item_v_tab group by 商品管理番号; -------------------------------------------------------------------------------- で商品管理番号をグループ化します。 そしてcsvでエクスポートすると subcodeの一部、サイズカラーが多いもので文字数が切れてしまいます。 データ型を変更すれば切れずにすべて出力できるのかな? と考えて調べていたのですが、方法がわかりません。 お分かりになる方お教えいただけないでしょうか。 以上よろしくお願い致します。

専門家に質問してみよう