mySQL从得分中获得排名

时间:2013-04-04 02:04:42

标签: php mysql

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

排名首先是空白,然后我更新它,或创建新字段以填写排名

3 个答案:

答案 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

SQL Fiddle Demo

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