SELECT @i:[email protected]+1 rowNum,
if(@total=t.s_score,@rank,@rank:[email protected]) rank,@total:=t.s_score,
t.*
from(
select t1.* ,t2.s_score from student t1 LEFT JOIN score t2 on t1.s_id=t2.s_id and t2.c_id="01" ORDER BY t2.s_score desc
)t,(select @i:=0,@rank:=0,@total:=null) s ;
SELECT @i:[email protected]+1 rowNum,
if(@total=t.s_score,@rank,@rank:[email protected]+1) rank,@total:=t.s_score,
t.*
from(
select t1.* ,t2.s_score from student t1 LEFT JOIN score t2 on t1.s_id=t2.s_id and t2.c_id="01" ORDER BY t2.s_score desc
)t,(select @i:=0,@rank:=0,@total:=null) s ;
Mysql 获取成绩排序后的名次
其实就是输出mysql的排序后的行号
RT:获取单个用户的成绩在所有用户成绩中的排名
可以分两步:
1、查出所有用户和他们的成绩排名
select id,maxScore,(@rowNum:[email protected]+1) as rowNo
from t_user,
(select (@rowNum :=0) ) b
order by t_user.maxScore desc
2、查出某个用户在所有用户成绩中的排名
select u.rowNo from (
select id,(@rowNum:[email protected]+1) as rowNo
from t_user,
(select (@rowNum :=0) ) b
order by t_user.maxScore desc ) u where u.id="2015091810371700001";
|