我有一个这样的MySQL表:

id | points | rank | league_id
______________________________
1  | 84     | 0    | 1
2  | 55     | 0    | 1
3  | 104    | 0    | 1
4  | 123    | 0    | 2

我想完成的是:
id | points | rank | league_id
______________________________
1  | 84     | 2    | 1
2  | 55     | 3    | 1
3  | 104    | 1    | 1
4  | 123    | 1    | 2

所以-使用rank列来存储基于点数的排名,并按联赛id分组。这看起来是多余的,但我需要它来实现我的目的(这是一个幻想体育网站,有rank列可以极大地简化许多PHP代码,并减少整个脚本中所需的查询数)。
我知道一个明显的解决方案-遍历行、按联盟id分组并逐个更新列。我想知道的是,有没有更有效的解决方案?

最佳答案

哦,所以先在一个废弃的数据库上测试,准备加载备份:

  SET @rank = 1;
  SET @league = 0;

  UPDATE tablename
  SET
      rank = @rank := IF(@league = league_id,@rank+1,1),
      league_id = @league := league_id
  ORDER BY league_id,points DESC;

关于mysql - MySQL查询按一列排序并生成其排名(相当于RANK OVER PARTITION oracle),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15325032/

10-13 23:05