MySQL:添加位置列

时间:2010-02-06 17:18:26

标签: mysql optimization

给出一张表:

id | score | position
=====================
 1 |    20 |        2
 2 |    10 |        3
 3 |    30 |        1

我可以使用什么查询来使用(不可为空)分数列来优化设置位置列?

(我确定我以前见过这个,但我似乎无法找到正确的关键字来找到它!)

3 个答案:

答案 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”表达式。即使您出于某种充分的理由想要一个位置列,请记住,最有可能存在得分列的索引,这在大多数情况下与位置列完全相同。不管怎样,或者我完全误解了你的问题。