Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果学生人数超过100人,请获取课程名称_Mysql_Sql Server_Database_Database Design - Fatal编程技术网

Mysql 如果学生人数超过100人,请获取课程名称

Mysql 如果学生人数超过100人,请获取课程名称,mysql,sql-server,database,database-design,Mysql,Sql Server,Database,Database Design,我正在学习设计一个数据库。我发现了以下例子: 您被要求为学院的课程注册系统设计一个关系数据库 该系统具有以下要求: 一门课程只能指定一名教师 老师可以教很多课程 一个学生可以选修许多课程 一门课程可以有很多学生 我的设计是这样的: 课程:CourseID主键,CourseName,学时 学生:学生ID主键,姓名 教师:教师ID主键,姓名 CourseTime:SectionNo主键、CourseID主键、教师ID、日程安排 注册:CourseID主键,SectionNo主键,StudentID主

我正在学习设计一个数据库。我发现了以下例子:

您被要求为学院的课程注册系统设计一个关系数据库

该系统具有以下要求:

一门课程只能指定一名教师 老师可以教很多课程 一个学生可以选修许多课程 一门课程可以有很多学生 我的设计是这样的:

课程:CourseID主键,CourseName,学时 学生:学生ID主键,姓名 教师:教师ID主键,姓名 CourseTime:SectionNo主键、CourseID主键、教师ID、日程安排 注册:CourseID主键,SectionNo主键,StudentID主键 现在我想知道有100多名学生的课程名称。我将如何为此编写查询?有谁能推荐一下吗

我尝试了以下方法:


从课程c中选择c.courseName,其中从注册e中选择count*,其中e.courseID=c.courseID,但点击了此处。

我的回答是为了帮助您了解SQL,让您可以找到一个好地方。现在是假期。干杯

 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
所以你需要100多名学生。现在,您可以找到的唯一表格是“注册”

您需要coursename,所以当然需要用到course表

现在你必须问问自己,他们是否可以加入。 当然,两者都有CourseID。 但是不呢? 嗯,因为一门课程只能有一位老师讲授,而CourseTime与CourseID之间有一个sectionNo,并且只定义了什么老师和什么时间。所以这可能是多余的。但你必须证实这一点

在这种情况下,我们有我们的加入标准,我们只需要知道我们是否能找到超过100名学生的课程

100名学生。这是聚合问题,所以分组

但是按什么分组呢?我们需要CourseName,这是CourseID独有的,所以按CourseName分组

现在,当使用条件检查聚合时,我们使用-yes

所以我们有Count1>100

下面是完整的查询。希望它能帮助你,也希望你长大后能帮助别人

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

看来你没有考虑过班级部分。例如,英语-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

-Fatemeh的小修改版

因为这是一个家庭作业问题,我有义务问你到目前为止做了什么?会有加入,分组并计数here@DhruvJoshi我试着这样做:从课程c中选择c.courseName,其中选择计数*从注册e中选择e.courseID=c.courseID,但我不确定在这之后我应该如何选择超过100@StackAcc请编辑您的问题并添加上述查询在里面。这将防止来自偷窥的向下投票!显示返回相关零件的一些查询。阅读并点击谷歌的“stackexchange家庭作业”。注册中没有coursename列吗@Fatemehsheikhhab基于问题中的设计,注册中没有课程名称
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