数据库: 
id  name grade
  1   2     80
  2   2     90
  3   3     80
  4   4     88一条Select语句打印如下信息:
  id  name grade rank(排名)
  1   2     80    3
  2   2     90    1
  3   3     80    3
  4   4     88    2 

解决方案 »

  1.   

    在表中增加一个字段记录名次,这个是最简单解决方法。
    排名这类信息如果是经常使用,记录在数据库中比每次使用SQL产生出来有效很多。提示:SQL 可以使用子查询来进行实现。
      

  2.   


    --SQL 2005
    Select id,Name,Grade,Dense_Rank() Over(Order By Grade Desc) As Rank
    From dbo.TableName
    Order By id
      

  3.   


    select t.* , (select count(1) from tb where grade >= t.grade) + 1 rank from tb t
      

  4.   

    create table tb(id int, name int , grade int)
    insert into tb values(1 , 2 ,   80 )
    insert into tb values(2 , 2 ,   90 )
    insert into tb values(3 , 3 ,   80 )
    insert into tb values(4 , 4 ,   88 )
    goselect t.* , (select count(1) from tb where grade > t.grade) + 1 rank from tb tdrop table tb /*
    id          name        grade       rank        
    ----------- ----------- ----------- ----------- 
    1           2           80          3
    2           2           90          1
    3           3           80          3
    4           4           88          2(所影响的行数为 4 行)
    */
      

  5.   

    哦,看错了,以为是MSSQL
    再来一句,这是用count来模拟排名.Select id,Name,Grade,
    (Select Count(Distinct ID) From TableName as t2 where t2.grade>t1.Grade)+1 As Rank
    From TableName As t1
      

  6.   


    select 
      id,
      name,
      grade,
      (select count(1) from tb where grade>=(select grade from tb where id=a.id order by grade desc limit 1)) as rank 
    from tb a/**
    id          name        grade       rank        
    ----------- ----------- ----------- ----------- 
    1           2           80          4
    2           2           90          1
    3           3           80          4
    4           4           88          2
    **/
      

  7.   

    select 
      id,
      name,
      grade,
      (select count(1) from tb where grade>(select grade from tb where id=a.id order by grade desc limit 1))+1 as rank 
    from tb a
    /**
    id          name        grade       rank        
    ----------- ----------- ----------- ----------- 
    1           2           80          3
    2           2           90          1
    3           3           80          3
    4           4           88          2
    **/
      

  8.   

    SELECT a.id,a.name,a.grade,count(b.id)+1 from tt1 a left join tt1 b on a.grade<b.grade
    group by a.id,a.name,a.grade
      

  9.   

    看看这里吧。http://blog.chinaunix.net/u/29134/showart_379356.html