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

相关文章:

MySQL 其他人查看过

Mysql 仅连接特定行

mysql - 将行值转置为列

php - 我想将一个表中的行与另一个表中的行进行匹配,并且每行应该只匹配一次

mysql - 如何获取每月每天的地址数量

php - 我的 Laravel 项目未连接到 XAMPP 数据库

mysql - golang MySQL "connection refused"

php - 从站点运行时查询给出不同的结果

mysql - 从 MySql 存储过程中连接到远程主机

mysql - 停止在 tz 更改时自动更改 MySQL 中的日期