select data.* , @r1:=@r1+1 , @r:=if(@p=value,@r,@r1) as 排名 , @p:=value from( select 100 as value union all select 100 as value union all select 90 as value union all select 80 as value union all select 80 as value union all select 70 as value ) data,(select @r:=0) as b,(select @r1:=0) as c, (select @p:=null) as d order by value desc;
data 子查询用你的数据表代替,value 对应成绩列,排名列是你要的
select 分数, ifnull((select count(*) from table1 where 分数>t.分数),0)+1 as 名次 from table1 t
, @r1:=@r1+1
, @r:=if(@p=value,@r,@r1) as 排名
, @p:=value
from(
select 100 as value union all
select 100 as value union all
select 90 as value union all
select 80 as value union all
select 80 as value union all
select 70 as value
) data,(select @r:=0) as b,(select @r1:=0) as c, (select @p:=null) as d
order by value desc;
from table1 t