[英]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.