MySQL 使用 GROUP 和 ORDER 进行更新

Gon*_*sta 2 mysql sql

我正在尝试对表进行更新,以便它可以根据另一个列的顺序增加 1 列上的值。事情是这样的

 ID    GROUP_ID    ORDER(Desired)   ORDER(NOW)
 1        1             1              2
 2        1             2              3
 3        1             3              1
 4        2             1              2
 5        2             2              1
 6        3             1              1
 7        3             2              1
 8        3             3              2
Run Code Online (Sandbox Code Playgroud)

所以我需要的是对于每个 ID,更新 ORDER 列,以便它可以在每个 GROUP_ID 中从 1 开始连续。

我已经找到了一些有关更新和订单的类似问题的解决方案,但没有一个解决方案对同一表中的组使用多个订单。

希望我正确地说明了问题。提前致谢

sag*_*agi 5

您可以通过再次对行进行“排名”来完成此操作。Mysql 不支持窗口函数,但您可以使用 join 和 count 获得相同的结果,如下所示:

UPDATE YourTable t
INNER JOIN(SELECT s.id,s.group_id,count(*) as cnt
           FROM YourTable s
           INNER JOIN YourTable ss 
            ON(s.group_id = ss.group_id and s.id >= ss.id)
           GROUP BY s.id,s.group_id) tt
 ON (t.id = tt.id and t.group_id = tt.group_id)
SET t.order = tt.cnt
Run Code Online (Sandbox Code Playgroud)