select t.score Score,t.rank 'Rank' from
(
select score, @r:=IF(@sc=score,@r,@r+1) as 'rank', @sc:=score
from Scores, (select @r:=0, @sc:=NULL)init
order by score desc
) t
结果都是对的,为啥我这个小数点后面多了一位呢? 好像 rank 的数据类型也不对呢。。
1
amiwrong123 OP |
2
justgodlike1993 2020-09-09 01:25:17 +08:00
用 CAST 转
|
3
amiwrong123 OP @justgodlike1993
两个字段都得转吗 |
4
walkerliu 2020-09-09 16:26:29 +08:00
select `Score`,CONVERT(SUBSTRING_INDEX(`Rank`,'-',-1),UNSIGNED INTEGER) as `Rank` from (
select score, case when @preScore - score > 0.001 then @rank := @rank + 1 else @rank end as `rank` , @preScore := score from (select score from Scores order by score desc ) v,(select @rank := 1,@preScore := -1) r ) p |
5
amiwrong123 OP |
6
walkerliu 2020-09-09 17:13:06 +08:00
@amiwrong123 我的是英文版的网站,这个 SQL 是我 17 年的提交,现在翻出来已经 accept 不了了,改了一下才行(加了 ``)。 另外查询结果的 score 应该是对的不存在小数点的问题。Rank 需要强转一下成 int 类型。
|
7
amiwrong123 OP |