我如何在mysql中获得前5的分数

问题描述:

我想从学生表中获得前5的分数。 表看起来像那样。我如何在mysql中获得前5的分数

table: student 

    id name score 

    1 a  100 
    2 b  100 
    3 c  90 
    4 d  87 
    5 e  85 
    6 f  88 
    7 g  83 
    9 h  92 

,如果我做

select name,score from student order by score desc limit 5 

    a 100 
    b 100 
    h  92 
    c  90 
    f  88 

不过,我希望看到这个结果

a 100 
    b 100 
    h  92 
    c  90 
    f  88 
    d  87 

我试图找出重复的分数作为计算一个 任何解决方案? 在此先感谢。

+0

你所说的 “重复分数” 指什么?你为什么将e和g排除在期望的结果之外? – Melanie 2013-02-20 16:25:06

+0

如果你想找到排名而不是直接计数,这篇文章有一些有趣的技术来实现这一目标:http://stackoverflow.com/questions/3333665/mysql-rank-function – 2013-02-20 16:28:28

+0

我想你的意思是说“我无法滤除重复的分数。“在这种情况下,约翰孔德的答案是给你的。 – Kzqai 2013-02-20 16:30:12

SELECT s.* 
FROM student AS s 
    JOIN 
    (SELECT DISTINCT score 
     FROM student 
     ORDER BY score DESC 
      LIMIT 5 
    ) AS lim 
    ON s.score = lim.score 
ORDER BY s.score DESC ; 
+0

我不知道连接可以像这样使用,谢谢 – sandeepKumar 2013-02-20 16:52:26

尝试使用GROUP BY

SELECT 
    score 
    COUNT(*) AS score_count 
FROM 
    student 
GROUP BY 
    score 
ORDER BY 
    score desc 
LIMIT 5 
+1

这将返回五行。示例结果有六行。 – 2013-02-20 16:32:01

+0

然后改变极限为6 – 2013-02-20 16:33:42

+0

他怎么知道他是否有更多的记录相同???你是说将它限制为6? – sandeepKumar 2013-02-20 16:40:06

这里有一种方法:

select s.* 
from student s 
where s.score >= (select score 
        from (select distinct score from student order by score desc limit 5) s 
        order by score 
        limit 1 
       ) 

这得到在最内层的子查询降序得分。它将此限制为五个不同的分数。然后,它找到最小值,并返回具有此分数或更高分数的所有行。

这里是sql fiddle

SELECT s.id, s.name,s.score FROM tbl_student AS s INNER JOIN (SELECT * FROM tbl_student ORDER BY score DESC LIMIT 0,5) AS s2 ON s2.id=s.id order by s.score desc