Mysql 在SQL查询中使用Count和Max

Mysql 在SQL查询中使用Count和Max,mysql,sql,count,max,Mysql,Sql,Count,Max,我有两个表,我试图从中查询,注册和课程。在课程表中,每个课程只有一个条目,但在注册表中,任何课程中注册的每个学生都有一个条目,因此一门课程可能有30个条目。我的任务是找到注册人数最多的课程,并打印出该课程名称以及该课程的注册人数。这是我目前的疑问 select c.CourseCode ,(SELECT count( * ) FROM Enrollment WHERE CourseCode = c.CourseCode) as test from Course c ; 这给了我结果: CS22

我有两个表,我试图从中查询,注册和课程。在课程表中,每个课程只有一个条目,但在注册表中,任何课程中注册的每个学生都有一个条目,因此一门课程可能有30个条目。我的任务是找到注册人数最多的课程,并打印出该课程名称以及该课程的注册人数。这是我目前的疑问

select c.CourseCode ,(SELECT count( * ) FROM Enrollment WHERE CourseCode = c.CourseCode) as test from Course c ;
这给了我结果:

CS227-29

CS228-34

CS309-31

CS311-25 ,etc,这很好,但是现在,我如何只打印注册人数最多的类(在本例中为CS228)。我试过使用max(),但什么都没用

这是表格结构 创建表格课程( CourseCode char(50), CourseName char(50), PreReq字符(6))

创建表注册( CourseCode字符(6)不为空, SectionNo int NOT NULL, StudentID字符(9)不为空引用Student, 等级字符(4)不为空, 主键(课程代码、学生ID),
外键(课程代码,章节号)参考资料

按计数排序后取前1名即可

即:

Select Top 1 A.CourseCode, Count(*) From Course A inner join Enrollment B on (A.CourseCode=B.CourseCode) 
Group By A.CourseCode
Order By Count(*) DESC

另外-使用我在这里展示的内部联接,而不是子查询。我确实倾向于喜欢子查询,这一个可以工作,但它不适合这种查询

根据您的评论,我认为blow查询是您想要的,尽管它未经测试,而且我不能完全确定HAVING子句是否有效。从MySQL页面上的文档来看,它似乎应该可以工作

SELECT A.CourseCode, COUNT(*) AS count FROM Course A
JOIN Enrollment B ON A.CourseCode = B.CourseCode
GROUP BY A.CourseCode
HAVING count = MAX(count)
至于性能,我不知道在聚合函数上运行MAX是否是一个好主意(可能不是)


否则,只需使用另一个查询返回前X,然后简单地与上一个数字进行比较。

您能提供表格结构吗?我用表格结构编辑了这个问题谢谢您的回答,但是如果两个不同的班级有相同数量的学生呢?在这种情况下,我需要两个类都打印出来谢谢!不幸的是,having语句似乎不起作用。语法正确,但它返回CourseCode和Count的空数据。
SELECT 
      c.CourseCode, 
      c.CourseName,
      COUNT(*) AS cnt 
FROM
      Course AS c
  INNER JOIN
      Enrollment AS e
          ON c.CourseCode = e.CourseCode 
GROUP BY
      c.CourseCode
HAVING 
      COUNT(*) = 
         ( SELECT  
                 COUNT(*) AS cnt 
           FROM
                 Enrollment AS e
           GROUP BY
                 e.CourseCode
           ORDER BY
                 cnt DESC
           LIMIT 1
         )