获取学生超过100的课程名称

时间:2017-12-14 23:48:58

标签: mysql sql-server database database-design

我正在学习设计数据库。我找到了以下示例:

要求您为大学的课程注册系统设计关系数据库。

系统具有以下要求:

  • 课程只能分配一名教师
  • 老师可以教授很多课程
  • 学生可以参加很多课程
  • 一门课程可以有很多学生

我的设计就是这样:

  • 课程 CourseID 主键), CourseName 小时
  • 学生 StudentID 主键),名称
  • 教师 TeacherID 主键),名称
  • CourseTime SectionNo 主键), CourseID 主键), TeacherID 计划
  • 注册 CourseID 主键), SectionNo 主键), StudentID 主键

现在我正在尝试获得超过100名学生的课程名称。我该怎么写这个查询?任何人都可以建议吗?

我尝试了以下内容:

选择c.courseName FROM课程c其中(选择计数(*)FROM Enrollment e,其中e.courseID = c.courseID和)但是在那里敲击。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我正在回答你的帮助,这样你就可以学习SQL并找到一个很好的地方。以及它的假期时间。干杯!

所以你需要超过100名学生。现在,您找到它的唯一表格是Enrollment

你需要coursename,所以当然会涉及Course表。

现在你必须问自己,他们是否可以加入。 当然,两者都有CourseID。 但是SectionNo呢? 好吧,嗯,因为一门课程只能有一位老师教授它,而CourseTime有sectionNo with CourseID,并且只定义了教师和小时。这可能是多余的。但你必须验证。

在这种情况下,我们有加入标准,我们只需要知道我们是否可以找到具有>的课程。 100名学生

100名学生。所以这是聚合问题,所以GROUP BY

但是按什么分组呢?好吧,我们需要CourseName,它对CourseID来说是唯一的,所以按课程组分组。

现在,在检查具有条件的聚合时,我们使用 - 是HAVING

所以我们有HAVING Count(1)>100

以下完整查询。希望它有所帮助,并且你可以长大,以帮助其他人。

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

答案 2 :(得分: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

答案 3 :(得分: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的小修改版