【问题标题】:Select top n amount (by considering some record have same amount)选择前 n 个金额(考虑到某些记录具有相同的金额)
【发布时间】:2014-02-02 00:19:22
【问题描述】:

有表 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 的前 3 名。

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

【问题讨论】:

  • 由于您想要SELECT 的数量不同,这似乎更适合存储过程或SQL 语句之外的分析。

标签: mysql sql select limit


【解决方案1】:

您可以加入前 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多