Mysql 更新表为所有具有重复值的行设置相同的值

Mysql 更新表为所有具有重复值的行设置相同的值,mysql,Mysql,我有一张运动成绩表。当使用以下代码时,该表根据时间获取位置 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

我有一张运动成绩表。当使用以下代码时,该表根据时间获取位置

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;
| 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     |