Есть какой-либо запрос MySQL для обновления / замены группы по точкам таблицы в другую таблицу MySQL

#mysql #group-by #sql-update #mysqlupgrade

#mysql #группировка по #sql-обновление #mysqlupgrade

Вопрос:

Я фильтрую My (TableA — поля app_id, user_id, points, tr_type, description), используя запрос ниже

 select app_id, user_id,sum(case when tr_type = 'add' then points when tr_type = 'sub' then - points end) as points
from TableA
group by app_id, user_id;
 

В Resuts:

 app_id  user_id  points
1          1a      10
1          1b      12
1          1c      3
 

Теперь у меня есть другая таблица (TableB)

 app_id   user_id   points  desc
1          1a      0       text
1          1b      0       tet
1          1c      0       txt
 

теперь мне нужен быстрый запрос на замену для обновления значений точек TableB, которые являются groupby из TableA

Комментарии:

1. Если вы можете запросить число, гораздо лучше сделать это, а не сохранять итоговые данные в таблице, поскольку они почти всегда будут неправильными. кто-то где-то быстро исправит db и забудет сохранить итоги

Ответ №1:

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

 update tableB b
INNER JOIN (
    select app_id
        , user_id
        ,sum(case when tr_type = 'add' then points when tr_type = 'sub' then - points end) as points
    from TableA
    group by app_id, user_id

) t ON t.app_id = b.app_id
    AND t.user_id = b.user_id 
set b.points = t.points