比方表格如下:
id 姓名 成绩
1 a 97
2 b 90
3 c 98
4 d 97
5 e 66
................
现在要求找出排前10名的姓名和成绩,必须显示名次,满足下列情况:
如果同分,比如最高分有两人人,那么这两个人都是第1名,第2高分的就是第3名(此时不存在第2名)了,以此类推;
假如第10名有3个人,那么这3个人都并列第10,这样查询出来就有12个结果了;
假如第9名同时有4个人,那么这4个人并列第9,就没有第10名了,一共就有12个结果;请问实现上面的功能,需要分多次查询吗?能否一次查询就出来?谢谢!
id 姓名 成绩
1 a 97
2 b 90
3 c 98
4 d 97
5 e 66
................
现在要求找出排前10名的姓名和成绩,必须显示名次,满足下列情况:
如果同分,比如最高分有两人人,那么这两个人都是第1名,第2高分的就是第3名(此时不存在第2名)了,以此类推;
假如第10名有3个人,那么这3个人都并列第10,这样查询出来就有12个结果了;
假如第9名同时有4个人,那么这4个人并列第9,就没有第10名了,一共就有12个结果;请问实现上面的功能,需要分多次查询吗?能否一次查询就出来?谢谢!
select a.姓名, a.成绩, (select count(id) from 表 where 成绩>=a.成绩) as 名次
from 表 a limit 0, 10
select a.姓名, a.成绩, (select count(id) from 表 where 成绩>=a.成绩) as 名次
from 表 a
) b where b.名次<=10
select * from
(select (select count(id)+1 from rank where grade>a.grade) as 名次,a.name, a.grade
from rank a) b where b.名次<=4 order by b.名次