我有一张运动成绩表。当使用以下代码时,表格根据时间获取位置。
SET @pos := 0;
UPDATE table SET Place = ( SELECT @pos := @pos + 1 ) ORDER BY Time ASC;
如果时间相同(如第1,3行和第4,5行),它会根据ID-s进行更新,因此结果如下:
ID | Time | Place
1 | 00:12:14 | 1
2 | 00:12:18 | 3
3 | 00:12:14 | 2
4 | 00:12:25 | 4
5 | 00:12:25 | 5
如何更新表格,以便如果同时有多行,所有行都会获得最佳位置(如下表所示)?
ID | Time | Place
1 | 00:12:14 | 1
2 | 00:12:18 | 3
3 | 00:12:14 | 1
4 | 00:12:25 | 4
5 | 00:12:25 | 4
最佳答案
您可以通过将表连接到查询,为每行返回小于其时间的行数来实现此目的:
update tablename t inner join (
select t.id, (
select count(*) counter from tablename
where time < t.time
) counter
from tablename t
) c on c.id = t.id
set t.place = c.counter + 1;
请参阅demo .
结果:
| ID | Time | Place |
| --- | -------- | ----- |
| 1 | 00:12:14 | 1 |
| 2 | 00:12:18 | 3 |
| 3 | 00:12:14 | 1 |
| 4 | 00:12:25 | 4 |
| 5 | 00:12:25 | 4 |
关于mysql - 更新表为具有重复值的所有行设置相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913293/