4

我有下表:

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 语句?

4

1 回答 1

2

SQLFiddle 演示

(select * from T) T2当您不能在子查询中使用更新表时,这里避免 MySQL 限制:( "You can't specify target table 'T' for update in FROM clause")

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)
于 2013-11-01T06:48:08.757 回答