2014-01-14 44 views
2

有表学生(专栏:StudentID,ClassID)。试图找出与大多数学生的前三名。如果有同样数量的学生,也必须列出。一直在努力执行以下操作:选择最多n个金额(考虑一些记录有相同的金额)

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中的排名,可以用来解决这个..

+0

由于您希望SELECT的数量不同,这似乎更适合存储过程或用于SQL语句之外的分析。 – DopeGhoti

+0

missclick .......... – NewInTheBusiness

回答

3

您可以用顶部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 

THE SQL FIDDLE.