【问题标题】:Using Count and Max in SQL Query在 SQL 查询中使用计数和最大值
【发布时间】:2026-01-24 00:20:03
【问题描述】:

我有两个要查询的表,即 Enrollment 和 Course。在 course 表中,每门课程只有一个条目,但在 Enrollment 表中,对于注册任何课程的每个学生都有一个条目,因此一门课程可能有 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), 课程名称 char(50), PreReq char (6));

创建表注册 ( CourseCode char(6) NOT NULL, SectionNo int NOT NULL, StudentID char(9) NOT NULL 引用学生, 等级 char(4) NOT NULL, 主键(CourseCode、StudentID)、 外键(CourseCode、SectionNo)引用产品);

【问题讨论】:

  • 能否提供表结构?
  • 我用表格结构编辑了问题

标签: mysql sql count max


【解决方案1】:

按数量点单后取前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,这个可以工作,但它不适合这种查询!

【讨论】:

  • 感谢您的回答,但如果两个不同班级的学生人数相同怎么办?在这种情况下,我需要打印两个类
【解决方案2】:

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

【讨论】:

  • 感谢您的回答!不幸的是,有声明似乎不起作用。语法是正确的,但它返回 CourseCode 和 Count 的空数据。
【解决方案3】:
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
         )

【讨论】:

    最近更新 更多