[英]mySQL getting rank from score
我有表格字段得分中的数字,我想根据如下得分来fill/add
排名字段。 我该怎么做?
Score --> Rank
75
82
83
75
90
78
78
75
80
73
76
当我们进行整理时,它是这样的:
Score > Rank
90 1
83 2
82 3
80 4
78 5.50
78 5.50
76 7
75 8.50
75 8.50
75 8.50
73 11
排名最初是空白的,然后我对其进行更新,或创建新字段以填充排名
获取分数的最小值和最大值,然后
UPDATE table SET rank= ((Score-@Min)/(@Max-@Min))*9+1
排名从1-10。 相应地将9更改为您的等级限制。
我有点困惑您如何获得5.5 vs 5和8.5 vs 8(甚至9),但是如果您要查找行号或排名,则可以使用用户定义的变量:
SELECT y.score, y.score/z.maxscore perc,
@rn:=@rn+1 rn,
@rnk:=IF(@score=y.score,@rnk,@rn) rnk,
@score:=y.score
FROM yourtable y
CROSS JOIN (SELECT MAX(score) maxscore
FROM yourtable) z
JOIN (SELECT @score:=-1,@rnk:=0,@rn:=0) t
ORDER BY 2 DESC
如果您一直在寻找排名+ 0.5,可以轻松地将其添加到上述查询中。 只是不完全理解逻辑。
获得平均排名需要更多的工作。
select t.score, (minrank + maxrank) / 2.0 as rank
from t join
(select t.score, min(rank) as maxrank, max(rank) as minrank
from (select t.score, @rn = @tn + 1 as rank
from t cross join (select @rn := 0) const
order by t.score desc
) t
group by t.score
) tr
on tr.score = t.score
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.