2017-12-14 5 views
-2

私はデータベースを設計することを学んでいます。私は次の例を見つけました:生徒が100名を超えるコース名を取得

大学のコース登録システム用のリレーショナルデータベースを設計するように求められます。

システムは、次の要件があります。

  • コースのみの教師が多くのコース
  • 学生を教えることができる1人の教師
  • を割り当てることができますが、コースは持つことができ、多くのコース
  • を取ることができます多くの学生

私のデザインは、このために、このようになります:

  • コースCourseID主キー)、CourseName時間
  • 学生StudentID主キー)、名前
  • 先生TeacherID主キー)、名前
  • CourseTimeSectionNo主キー)、CourseID主キー)、 教師ID,スケジュール
  • 登録CourseID主キー)、SectionNo主キー)、StudentID主キー

は、今私がしようとしています100名以上の学生がいるコース名を取得する。どのように私はこれのためのクエリを書くだろうか?誰でもお勧めしますか?

私が試してみました次:もちろんCからそこに打ったが、(SELECT COUNT(*)e.courseID = c.courseIDと入学Eから)

選択c.courseName。

+2

の小さな修正版、私が尋ねる-'Whatをする義務よ、あなたはこれまでにしようとしている ' – DhruvJoshi

+0

、グループに参加するがあるでしょう?ここでカウントしてください – maSTAShuFu

+0

@DhruvJoshi私はこの方法でこれをやろうとしています:c.courseName FROM course cを選択してください。(select count(*) 登録eからe.courseID = c.courseID and) この後に私は100以上の学生を選択する必要があります –

答えて

0
select a.CourseID,CourseName from 
    enrollment a 
inner join Course b 
on a.CourseID=b.CourseID 
    group by a.CourseID,CourseName 
    having count(StudentID)>100 
+0

登録にcoursename列はありませんか? @FatemehSheikhha –

+0

質問のデザインに基づいて、登録時にコースナムがありません –

0

私はあなたがSQLで学ぶことができますので、一般的にいい場所を見つけることができます。そしてそれは休暇の時間です。乾杯!

あなたは100人以上の学生が必要です。あなたがそれを見つける唯一のテーブルはEnrollment

であり、コースナームが必要なので、もちろんCourseテーブルが含まれています。

今すぐ参加する必要があります。 確かに両方にCourseIDがあります。 しかし、SectionNoについてはどうですか? もちろん、コースには1人の教師しかいないので、CourseTimeにはCourseNoとCourseIDがあり、どの教師と何時間しか定義していないからです。それはおそらく冗長です。しかし、それを確認する必要があります。このような場合には

は、我々は我々の基準に参加していて、私達はちょうど私たちが> 100人の学生

100の学生を持ってコースを見つけることができるかどうかを知る必要があります。これは集約の問題ですので、GROUP BYです。

しかし、何でグループ化しますか?もちろん、CourseNameが必要です。CourseNameで一意になりますので、CourseNameでグループ化してください。条件で凝集物をチェックするとき

は今、私たちはイエス

HAVINGだから私たちは以下のHAVING Count(1)>100

全クエリを持っていuse--。それが助けられ、あなたが他人を助けるために成長するかもしれないことを望みます。

select 
    C.CourseName 
    from 
    Course C INNER JOIN 
    Enrollment E 
    on C.CourseID=E.CourseID 
    group by C.CourseName 
    having count(1)>100 
0

あなたはクラスセクションを考慮していないようです。たとえば、英語-101は月曜日/水曜日/午前8時から10時半にかけて提供されますが、午後6時から午後9時までは火/木です。どちらも週6時間ですが、異なるセクションです。あなたの火/木クラスは30人の学生かもしれませんが、月/水/金は100 +です。

これはあなたが検討しているシナリオのタイプですか、最初にこの100カウントベースを得ることを見てください...

select 
     e.CourseID, 
     e.SectionID, 
     count(*) 
    from 
     Enrollment e 
    group by 
     e.CourseID, 
     e.SectionID 
    having 
     count(*) > 100 

これにより、コースごとに100人以上の生徒がいるものが得られます。今、コースと他のすべての情報を取得するには、これらのテーブルにこの結果を参加させる...何かが好きです。

select 
     C.CourseName, 
     C.Hours, 
     CT.Schedule, 
     T.Name, 
     PQ.EnrollCount 
    from 
     (select 
       e.CourseID, 
       e.SectionID, 
       count(*) EnrollCount 
      from 
       Enrollment e 
      group by 
       e.CourseID, 
       e.SectionID 
      having 
       count(*) > 100) PQ 
     JOIN Course C 
     on PQ.CourseID = C.CourseID 
     JOIN CourseTime CT 
     on PQ.CourseID = CT.CourseID 
     AND PQ.SectionID = CT.SectionID 
     JOIN Teacher T 
      on CT.TeacherID = T.TeacherID 
0
select a.CourseID,a.CourseName from 
    enrollment a 
inner join Course b 
on a.CourseID=b.CourseID 
    group by a.CourseID,CourseName 
    having count(*)>100 

- この宿題の問題以来Fatemeh

関連する問題