#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