MySQL更新排名和关系

我有下表:

Rank  RankTies  TeamName  WinningPercentage
                TeamA     1000
                TeamB     1000
                TeamC     500
                TeamD     250
                TeamE     250
                TeamF     250
                TeamG     0

我想使用存储的例程通过WinningPercentage DESC对这些进行排名,因此更新的表应该是:

Rank  RankTies  TeamName  WinningPercentage
1     2         TeamA     1000
1     2         TeamB     1000
3     1         TeamC     500
4     3         TeamD     250
4     3         TeamE     250
4     3         TeamF     250
7     1         TeamG     0

我可以使用临时表执行此操作,但是有一个更优雅的解决方案,就像一个UPDATE语句?

最佳答案
SQLFiddle demo

(从T中选择*)T2这里为了避免MySQL限制,当你不能在子查询中使用更新的表:(“你不能指定目标表’T’用于FROM子句中的更新”)

update T T1 set RankTies=(select count(*) from 
                            (select * from T) T2 
                            where T2.WinningPercentage=T1.WinningPercentage),

Rank=(select count(*)+1 from 
                            (select * from T) T2 
                            where T2.WinningPercentage>T1.WinningPercentage)
点赞