Mysql Update Self Join, значение столбца приращения на основе группы - PullRequest
0 голосов
/ 05 марта 2019

У меня есть таблица, структура которой похожа на приведенную ниже.

+ ---- + --------------- + ------- +
|id |группа |значение |
+ ---- + --------------- + ------- +
|1 |g1 |null |
|2 |g1 |null |
|3 |g2 |null |
|4 |g2 |null |
|5 |g2 |null |
|6 |g3 |null |
|7 |g3 |null |
|8 |g4 |null |
|9 |g4 |null |
+ ---- + --------------- + ------- +

Мне нужно обновить значениестолбец, чтобы таблица выглядела как

+ ---- + --------------- + ------- +
|id |группа |значение |
+ ---- + --------------- + ------- +
|1 |g1 |1 |
|2 |g1 |2 |
|3 |g2 |1 |
|4 |g2 |2 |
|5 |g2 |3 |
|6 |g3 |1 |
|7 |g3 |2 |
|8 |g4 |1 |
|9 |g4 |2 |
+ ---- + --------------- + ------- +

По сути, я увеличиваю *Столбец 1035 * на основе столбца group.

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Пожалуйста, попробуйте это, я надеюсь, это полезно для вас

Update A 
set value = _val
from @tblName As A
INNER JOIN (
SELECT id,Row_NUMBER() over(partition by [group] order by id) as _val  from  @tblName
)As B ON A.id = B.id
0 голосов
/ 05 марта 2019

В старых версиях MySQL переменные являются самым простым методом:

set @rn := 0;
set @grp := '';

update t
    set value = (@rn := if(@grp = t.group, @rn + 1,
                           if(@grp := t.group, 1, 1)
                          )
                )
    order by group, id;

В MySQL 8.0 используйте второй запрос fa06.

0 голосов
/ 05 марта 2019

Вы можете попробовать ниже - используя самостоятельное соединение

DEMO

update tablename t
join
(select b.id,b.groupname,count(b.id) as val from t1 a
join t1 b on a.groupname=b.groupname
and a.id<=b.id
group by b.id,b.groupname
)d on t.id=d.id
set value=val

ИЛИ

, которое вы можете использовать row_number() функция, если ваша версия mysql 8.0 +

update tablename t
join
(
  select *, row_number() over(partition by groupname order by id) as rn from t1 
)d on t.id=d.id
set value=rn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...