我有一个这样的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/