MySQL 更新排名和并列问题

4

我有以下表格:

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

我想使用存储过程按照WinningPercentage降序排列这些数据,更新后的表格应该是:

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

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)

哇!那非常简单而优雅。谢谢。 - user1822391

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接