Mysql 选择前n个金额(考虑到某些记录的金额相同)

Mysql 选择前n个金额(考虑到某些记录的金额相同),mysql,sql,select,limit,Mysql,Sql,Select,Limit,有表Student(列:StudentID,ClassID)。试着找出学生最多的前三名班级。如果有相同数量的学生,也必须列出。我一直在尝试以下方法: SELECT DISTINCT ClassID, COUNT(StudentID) FROM Student GROUP BY ClassID ORDER By COUNT(StudentID) DESC Limit 3 但这并没有列出相同的数量,事实上,如果有5个数字:40,20,20,10,5,它会列出40,20,20。但我想列出前三名,结

有表Student(列:StudentID,ClassID)。试着找出学生最多的前三名班级。如果有相同数量的学生,也必须列出。我一直在尝试以下方法:

SELECT 
DISTINCT ClassID, COUNT(StudentID)
FROM
Student
GROUP BY ClassID
ORDER By COUNT(StudentID)
DESC Limit 3
但这并没有列出相同的数量,事实上,如果有5个数字:40,20,20,10,5,它会列出40,20,20。但我想列出前三名,结果是40,20,20,10


我想知道MySQL中是否有类似排名的东西可以用来解决这个问题。

您可以加入前3个不同的计数值:

SELECT A.*
FROM (
    SELECT COUNT(StudentID) AS student_count, ClassID
    FROM Student
    GROUP BY ClassID
) A INNER JOIN (
    SELECT  DISTINCT COUNT(StudentID) AS student_count
    FROM Student
    GROUP BY ClassID
    ORDER BY student_count DESC
    LIMIT 3
) B ON A.student_count = B.student_count

由于要选择的
数量不同,因此这似乎更适合于存储过程或SQL语句之外的分析。