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