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用户定义的变量可能非常有用。