0

我的表格字段得分中有数字,我想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

排名一开始是空白的,然后我更新它,或者创建新字段来填写排名

4

3 回答 3

0

获取 Score 的 Min 和 Max 值,然后

UPDATE table SET rank= ((Score-@Min)/(@Max-@Min))*9+1 

这将从1-10排名。将 9 相应地更改为您的等级限制。

于 2013-04-04T02:13:57.953 回答
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

SQL 小提琴演示

如果您一直在寻找排名 + 0.5,那么很容易将其添加到上述查询中。只是没有完全理解其中的逻辑。

于 2013-04-04T02:15:12.677 回答
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
于 2013-04-04T02:19:17.977 回答