2014-01-14 75 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.