繁体   English   中英

在SQL查询中使用Count和Max

[英]Using Count and Max in SQL Query

我有两个表格要查询,分别是“注册”和“课程”。 在“课程表”中,每个课程只有一个条目,但是在“注册”表中,每个课程的每个学生都有一个条目,因此一个课程可能有30个条目。 我的任务是找到注册人数最多的课程,并打印出该课程的名称以及该课程的注册人数。 到目前为止,这是我的查询

select c.CourseCode ,(SELECT count( * ) FROM Enrollment WHERE CourseCode = c.CourseCode) as test from Course c ;

这给了我结果:

CS227-29

CS228-34

第309章-31

CS311-25等,这很好,但是现在,我如何只打印出注册人数最多的班级(在本例中为CS228)。 我已经尝试过使用max(),但是我什么都无法工作。

这是表结构

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

创建表注册(CourseCode char(6)NOT NULL,SectionNo int NOT NULL,StudentID char(9)NOT NULL引用Student,Grade char(4)NOT NULL,主键(CourseCode,StudentID),外键(CourseCode,SectionNo)参考产品);

只需按计数排序即可获得前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,并且这个查询可以工作,但是在这种查询中不合适!

根据您的评论,我认为打击查询是您想要的,尽管未经测试,并且我不确定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个,然后简单地与前一个数字进行比较即可。

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
         )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM