繁体   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