给出一张表:
id | score | position
=====================
1 | 20 | 2
2 | 10 | 3
3 | 30 | 1
我可以使用什么查询来使用(不可为空)分数列来优化设置位置列?
(我确定我以前见过这个,但我似乎无法找到正确的关键字来找到它!)
答案 0 :(得分:3)
set @rank = 0;
update tbl a join (select score, @rank:=@rank+1 as rank from tbl group by score
order by score desc) b on a.score = b.score set a.position = b.rank;
一举更新这个位置就可以了。等分得分平等
答案 1 :(得分:1)
使用您正在使用的语言计算它。因此,您的解决方案将是:
答案 2 :(得分:1)
SELECT * FROM your_table ORDER BY score;
您的职位列似乎是多余的,尽管很难从问题中给出的信息中分辨出来。您想要的功能是使用数据库行排序完成的,在上面的示例中可以看到“ORDER BY”表达式。即使您出于某种充分的理由想要一个位置列,请记住,最有可能存在得分列的索引,这在大多数情况下与位置列完全相同。不管怎样,或者我完全误解了你的问题。