Mysql 在SQL查询中使用Count和Max
我有两个表,我试图从中查询,注册和课程。在课程表中,每个课程只有一个条目,但在注册表中,任何课程中注册的每个学生都有一个条目,因此一门课程可能有30个条目。我的任务是找到注册人数最多的课程,并打印出该课程名称以及该课程的注册人数。这是我目前的疑问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
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
)