我的表格字段中有数字得分,我想根据得分如下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
排名首先是空白,然后我更新它,或创建新字段以填写排名
答案 0 :(得分:0)
获取分数的最小值和最大值,然后是
UPDATE table SET rank= ((Score-@Min)/(@Max-@Min))*9+1
这将从1-10排名。根据您的排名限制更改9。
答案 1 :(得分:0)
我有点困惑你如何获得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,那么很容易将其添加到上述查询中。只是完全不了解逻辑。
答案 2 :(得分:0)
获得平均排名需要更多的工作;
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