繁体   English   中英

MySQL的得分排名

[英]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

SQL小提琴演示

如果您一直在寻找排名+ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM