Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mySQL从分数中获得排名_Php_Mysql - Fatal编程技术网

Php mySQL从分数中获得排名

Php mySQL从分数中获得排名,php,mysql,Php,Mysql,我的表字段得分中有数字,我想根据下面的得分填写/添加排名字段。我怎么能做到 Score --> Rank 75 82 83 75 90 78 78 75 80 73 76 当我们整理它时,它是这样的: Score > Rank 90 1 83 2 82 3 80

我的表字段得分中有数字,我想根据下面的得分填写/添加排名字段。我怎么能做到

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对5和8.5对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

排名是否已经是表中的一列?然后只需使用
按等级排序
。等级首先是空的,或者它可能是由创建等级的查询创建的另一个字段,我知道我似乎没有逻辑,我不知道我的客户为什么想要这个,无论如何,我不知道mySQL可以做这件事,尽管在代码中发现了一些奇怪的字符,如@=,无论如何,谢谢。@user1999194--np,很高兴我能帮上忙。mysql用户定义的变量可能非常有用。