簡體   English   中英

MYSQL中選擇多個值的MAX函數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM