MySQL 将重复的字段条目转换为重复的增量值
MySQL convert duplicate field entries to duplicate incrementing value
我目前有一个 table,它有一个用于多个条目的 parent_id 字段,即 4 个条目的相同 ID 号(如下面的屏幕截图所示)。我想将 parent_id 从 9000 向上转换为 运行,因此在屏幕截图中,000004 将在 4 个条目中变为 9000,000007 将在 4 个条目中变为 9001,依此类推(如示例结果所示).有谁知道实现这个的简单方法,因为我不想手动更改 2224 个条目!?
提前谢谢大家!
Table截图:
示例结果:
如果你运行的是 MySQL 8.0,你可以使用 dense_rank()
:
select
t.*,
8999 + dense_rank() over(order by parent_id) new_parent_id
from mytable t
在早期版本中,一个(效率较低的)选项使用相关子查询:
select
t.*,
9000 + (select count(distinct t1.parent_i) from mytable t1 where t1.parent_id < t.parent_id) new_parent_id
from mytable t
您似乎想要一个 update
。如果是:
update t join
(select t.*, row_number() over (order by id) as seqnum
from t
) tt
on t.id = tt.id
set t.parent_id = 9000 + floor( (seqnum - 1) / 4);
请注意,这会忽略当前的 parent_id
,根据 id
.
将相同的值分配给每组 4 行
编辑:
在 MySQL 的旧版本中:
update t join
(select t.*, (@rn := @rn + 1) as seqnum
from (select t.* from t order by id) t cross join
(select @rn := 0) params
) tt
on t.id = tt.id
set t.parent_id = 9000 + floor( (seqnum - 1) / 4);
我目前有一个 table,它有一个用于多个条目的 parent_id 字段,即 4 个条目的相同 ID 号(如下面的屏幕截图所示)。我想将 parent_id 从 9000 向上转换为 运行,因此在屏幕截图中,000004 将在 4 个条目中变为 9000,000007 将在 4 个条目中变为 9001,依此类推(如示例结果所示).有谁知道实现这个的简单方法,因为我不想手动更改 2224 个条目!?
提前谢谢大家!
Table截图:
示例结果:
如果你运行的是 MySQL 8.0,你可以使用 dense_rank()
:
select
t.*,
8999 + dense_rank() over(order by parent_id) new_parent_id
from mytable t
在早期版本中,一个(效率较低的)选项使用相关子查询:
select
t.*,
9000 + (select count(distinct t1.parent_i) from mytable t1 where t1.parent_id < t.parent_id) new_parent_id
from mytable t
您似乎想要一个 update
。如果是:
update t join
(select t.*, row_number() over (order by id) as seqnum
from t
) tt
on t.id = tt.id
set t.parent_id = 9000 + floor( (seqnum - 1) / 4);
请注意,这会忽略当前的 parent_id
,根据 id
.
编辑:
在 MySQL 的旧版本中:
update t join
(select t.*, (@rn := @rn + 1) as seqnum
from (select t.* from t order by id) t cross join
(select @rn := 0) params
) tt
on t.id = tt.id
set t.parent_id = 9000 + floor( (seqnum - 1) / 4);