请写出一条sql语句,计算学生表中的‘名次’字段(可以多条sql)
首先要计算每行的总和,使用mysql的函数SUM来计算
select id,name,age,address,teamid,SUM(chinese+math+english)
as totalscore from t_stu group by id order by totalscore desc
第一种情况:分数依次递减,然后设置名次的初始值为0,每次增加一
set @rank:=0;
select ta.*,@rank:=@rank+1 as rank from (select id,name,age,address,teamid,SUM(chinese+math+english)
as totalscore from t_stu group by id order by totalscore desc) as ta
第二种情况:如果有两个总分是一样的,那就要排成一样的名次
set @de:=0,@rank:=1;
select ta.*,if(@de > totalscore,@rank:=@rank+1,@rank),if(@de = totalscore,@rank:=@rank,@rank) as rank ,@de:=totalscore
from (select id,name,age,address,teamid,SUM(chinese+math+english)
as totalscore from t_stu group by id order by totalscore desc) as ta