• ベストアンサー

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句の順に適用されるものとする。 続きコメントに

質問者が選んだベストアンサー

  • ベストアンサー
  • kagep
  • ベストアンサー率23% (171/721)
回答No.2

とりあえず今質問されている内容だけ。 a: S.スクール名,T.地区名,COUNT(DISTINCT J.受講生番号),S.講師数 b: S.スクール名,T.地区名,S.講師数 Group Byについては、受講生数のところが受講生番号のCOUNTで集計されているので、 受講生数のGROUP BY句は無いはずです。

kaisuke1
質問者

お礼

おおおありがとうございます; ( a )の答えですが、受講生数がJSTの各項目にないのでどのように書くのか悩み通してました;; 以下、問題の続きを書きますね。 SELECT 地区名、SUM(講師数)、COUNT(スクール名)、FROMスクール別受講状況表 WHERE 講師数 < 5 GROUP BY 地区名  HAVING SUM(講師数) > 5 講師数=( c ) 【問3】 講師1人当たりの受講生数が30人未満の地区を検索したい。( d )に入れる正しい答えを書きなさい。 SELECT 地区名  FROM スクール受講状況表  GROUP BY 地区名 ( d ) 以上となります; よろしくお願いします^^;

その他の回答 (3)

回答No.4

続けて・・・、 問3 HAVING SUM(受講生数) / SUM(講師数) < 30 受講生の合計を講師の合計で割ったものが30未満、 つまり、講師1人当たり受講生30人未満・・・という事ですが。 ちなみに問2の解説ですが・・・、 地区ごと(A、B、C、D)に、WHERE句で指定されている5未満の講師数の合計が6以上(5より大きい)になるのはBだけ。 問題にもあるように、SELECTの結果は1行。 Bの講師数を上記の条件に照らし合わせて合計すると・・・、 全部5未満なので全部足す。 ゆえに12でした・・・。

kaisuke1
質問者

お礼

ありがとうございます! GROUP BY の定義が未だにいまいち納得していなく、変な風に考えてしまう自分がいます; ( c )の答えは5だと踏んでましたが、Aの合計では条件を全然満たしていなかったですね; 分かりやすい解説もあり、とても分かりやすかったです。 ありがとうございました~

回答No.3

こんにちは。 問2 12

  • hope4673
  • ベストアンサー率4% (1/22)
回答No.1

これは FROM~より、WHERE~~の条件で、SELECT~~~を導き出し、GROUP~~~~でくくる、という意味ですね。 なので恐らく( a )の答えは スクール名、地区名、COUNT受講生番号、講師数 になるかと思われます。 ただ( b )に関しては自身がないので書き込みません; 質問の続きですが、コメントへの返信の部分でもいいので書いてもらえませんか? なるべくお答えしますので^^;

kaisuke1
質問者

補足

なんか投稿されてなかったので、もう1回; ありがとうございます。 まず、、質問の続きを書きますね ↓ ↓ ↓   SELECT 地区名、SUM(講師数)、COUNT(スクール名)、FROMスクール別受講状況表 WHERE 講師数 < 5 GROUP BY 地区名  HAVING SUM(講師数) > 5 講師数=( c ) 【問3】 講師1人当たりの受講生数が30人未満の地区を検索したい。( d )に入れる正しい答えを書きなさい。 SELECT 地区名  FROM スクール受講状況表  GROUP BY 地区名 ( d ) 以上となります。 本当にSQL苦手でわからなくて; よろしく使お願いします