有学生桌的(列: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中的排名可以用来解决这个问题。。

最佳答案

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

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

THE SQL FIDDLE.

关于mysql - 选择前n个数量(通过考虑某些记录具有相同数量),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21105089/

10-11 02:50