我如何在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
我试图找出重复的分数作为计算一个 任何解决方案? 在此先感谢。
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 ;
我不知道连接可以像这样使用,谢谢 – 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
这将返回五行。示例结果有六行。 – 2013-02-20 16:32:01
然后改变极限为6 – 2013-02-20 16:33:42
他怎么知道他是否有更多的记录相同???你是说将它限制为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
你所说的 “重复分数” 指什么?你为什么将e和g排除在期望的结果之外? – Melanie 2013-02-20 16:25:06
如果你想找到排名而不是直接计数,这篇文章有一些有趣的技术来实现这一目标:http://stackoverflow.com/questions/3333665/mysql-rank-function – 2013-02-20 16:28:28
我想你的意思是说“我无法滤除重复的分数。“在这种情况下,约翰孔德的答案是给你的。 – Kzqai 2013-02-20 16:30:12