mysql排名问题

根据分数排名,分数相同,名次相同,平分后的下一个名次应该是下一个连续的整数值

select s.score,ROUND(rank) as rank from Scores s,
	(select score, @rank:=@rank + 1 as rank from 
		(select score  from Scores  group by score order by score desc) a, (select @rank:=0) b 
	) c
where s.score = c.score order by s.score desc

mysql排名问题_第1张图片

根据分数排名,分数相同,名次相同,平分后的下一个名次应该是跳跃整数值

select s.score,d.Rank  from Scores s,
    (select score,min(Rank) as Rank  from 
        (
	        select score, @Rank :=@Rank  + 1 as Rank  from 
		        (select score  from Scores  order by score desc) a, (select @Rank :=0) b 
        ) c
    group by c.score
    ) d
where s.score = d.score order by s.score desc

 

SELECT s.Score as Score,(SELECT ROUND(k.Rank)) as Rank 
FROM Scores as s 
LEFT JOIN 
	(SELECT m.Score, (@row:=@row+1) AS Rank FROM 
		(SELECT @row:=0) as w,(SELECT DISTINCT Score FROM Scores ORDER BY Score DESC) as m 
		GROUP BY m.Score DESC) as k 
ON k.Score = s.Score 
ORDER BY Rank ASC;

mysql排名问题_第2张图片

你可能感兴趣的:(Mysql)