我有下表:
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)