[英]MAX Function to select multiple values in MYSQL
我正在使用 MYSQL 来获取助教拥有的最大学生人数。 通过这个查询,我得到了所有的助教和每个助教的学生人数
SELECT TA.Name as Name, COUNT(Lecture.Student) AS studentcount
FROM TA
JOIN Lecture
WHERE TA.TA_PUID = Lecture.TA
GROUP BY TA.Name
ORDER BY studentcount DESC;
我的输出是这个
David 2
Justin 2
Matt 2
Jennifer 1
Hannah 1
Timothy 1
Bob 1
我只想获得具有最大学生价值的助教。 我怎样才能做到这一点? 在这种情况下,我希望我的输出是
David 2
Justin 2
Matt 2
您可以使用rank()
:
SELECT t.*
FROM (SELECT TA.Name as Name, COUNT(*) AS studentcount,
RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum
FROM TA JOIN
Lecture l
ON TA.TA_PUID = l.TA
GROUP BY TA.Name
) t
WHERE seqnum = 1;
请注意, JOIN
后面应该跟一个ON
子句而不是WHERE
子句。
你没有提到 MySQL 的版本。 在 MySQL 8.x 中,您可以使用 CTE(公用表表达式)来预先计算值。 然后,过滤很容易。
例如:
with
a as (
SELECT TA.Name as Name, COUNT(Lecture.Student) AS studentcount
FROM TA
JOIN Lecture
WHERE TA.TA_PUID = Lecture.TA
GROUP BY TA.Name
)
select * from a where studentcount = (select max(studentcount) from a)
在 MySQL 8 之前,您必须执行以下操作:
SELECT TA.Name as Name, COUNT(Lecture.Student) AS studentcount
FROM TA INNER JOIN Lecture ON TA.TA_PUID = Lecture.TA
GROUP BY TA.Name
HAVING studentCount = (
SELECT COUNT(Student) AS studentcount
FROM Lecture
GROUP BY TA
ORDER BY studentcount DESC
LIMIT 1
);
如果您使用的是 MySQL 8+,那么窗口函数和公用表表达式绝对是首选。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.