在SQL查询中使用Count和Max

时间:2011-09-17 23:29:58

标签: mysql sql count max

我正在尝试查询两个表,即注册和课程。在课程表中,每门课程只有一个条目,但在注册表中,每个学生都有一个条目参加任何课程,因此一门课程可能有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 ,等等,这很好,但现在,我如何只打印出注册最多的班级(在本例中为CS228)。我尝试过使用max(),但是我无法使用任何东西。

这是表结构

创建表课程( CourseCode char(50), CourseName char(50), PreReq char(6));

创建表注册( CourseCode char(6)NOT NULL, SectionNo int NOT NULL, StudentID char(9)NOT NULL引用Student, 等级char(4)NOT NULL, 主键(CourseCode,StudentID), 外键(CourseCode,SectionNo)引用Offering);

3 个答案:

答案 0 :(得分:3)

按照点票顺序排在前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

另外 - 使用我在这里显示的内连接而不是子查询。我倾向于喜欢SubQueries,这个可以工作,但它不适合这种查询!

答案 1 :(得分:0)

根据您的评论,我认为打击查询是您想要的,虽然它未经测试,但我不完全确定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,然后直接比较前一个数字。

答案 2 :(得分:0)

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
         )