比方表格如下:
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个结果;请问实现上面的功能,需要分多次查询吗?能否一次查询就出来?谢谢!

解决方案 »

  1.   

    LZ自己去修改字段名字吧
    select a.姓名, a.成绩, (select count(id) from 表 where 成绩>=a.成绩) as 名次
      from 表 a limit 0, 10
      

  2.   

    或者select * from (
    select a.姓名, a.成绩, (select count(id) from 表 where 成绩>=a.成绩) as 名次 
      from 表 a
    ) b where b.名次<=10
      

  3.   

    需要稍微改动一下
    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.名次