根据MySQL中另一列分组的另一列的顺序更新列

根据MySQL中另一列分组的另一列的顺序更新列,mysql,group-by,sql-update,sql-order-by,Mysql,Group By,Sql Update,Sql Order By,这是我的桌子: 我需要使用更新查询更新此表,以便在更新查询之后,我的表应为: i、 e)对于公共_id,我需要通过为该公共_id订购位置,从1开始更新位置 这只是一个示例表。我的实际表有数百万个条目。如果id列设置为自动递增,则可以在同一个表上使用带有join子句的update query update table1 a join ( select a.id,a.common_id,count(*) pos from table1 a left join table1 b on

这是我的桌子:

我需要使用更新查询更新此表,以便在更新查询之后,我的表应为:

i、 e)对于公共_id,我需要通过为该公共_id订购位置,从1开始更新位置


这只是一个示例表。我的实际表有数百万个条目。

如果id列设置为自动递增,则可以在同一个表上使用带有join子句的update query

update table1 a
join (
  select a.id,a.common_id,count(*) pos
  from table1 a
  left join table1 b on a.common_id = b.common_id
  and a.id >= b.id
  group by a.id, a.common_id
) b using(id,common_id)
set a.position = b.pos

如果只是出于选择目的,您可以将其用作

select a.id,a.common_id,count(*) pos
from table1 a
left join table1 b on a.common_id = b.common_id
and a.id >= b.id
group by a.id, a.common_id

注释后编辑(以位置最小者为准)的位置应为1

在您的评论之后,您可以根据职位标准进行更新,但这完全取决于公共id、职位是否唯一意味着每个公共id应有唯一的职位


这真的很好,但它只是基于id更新位置。即)对于公共id,无论哪个先到的位置都将获得位置1,但是具有最小位置的位置都应具有位置1。对于common_id=4的示例,您提供的更新查询无效。@SuryaPandian根据您的需要检查更新的答案
select a.common_id,a.position,count(*) pos
from table1 a
left join table1 b on a.common_id = b.common_id
and a.position >= b.position
group by a.common_id,a.position
order by a.common_id
update table1 a
join (
  select a.common_id,a.position,count(*) pos
  from table1 a
  left join table1 b on a.common_id = b.common_id
  and a.position >= b.position
  group by a.common_id,a.position
) b using(common_id,position)
set a.position = b.pos