Как получить сумму значений по идентификатору и обновить существующие записи в другой таблице

У меня есть две таблицы, такие как:

ID          |    TRAFFIC
fd56756     |      4398
645effa     |    567899
894fac6     |    611900
894fac6     |    567899

а также

USER        |      ID         |    TRAFFIC
andrew      |    fd56756      |       0
peter       |    645effa      |       0
john        |    894fac6      |       0

мне нужно получить SUM ("TRAFFIC") из первой таблицы И установить трафик столбца для второй таблицы, где первая таблица ID = second идентификатор таблицы Идентификаторы из первой таблицы не являются уникальными и могут дублироваться.
Как я могу это сделать?

2 ответа

Решение

Названия таблиц из вашего последующего комментария. Скорее всего, вы сообщаете неверно имена таблиц и столбцов.

UPDATE users u
SET    "TRAFFIC" = sub.sum_traffic
FROM  (
   SELECT "ID", sum("TRAFFIC") AS sum_traffic
   FROM   stats.traffic
   GROUP  BY 1
   ) sub
WHERE u."ID" = sub."ID";

В сторону: в Postgres неразумно использовать смешанные идентификаторы. Используйте легальные строчные идентификаторы, которые не нужно заключать в двойные кавычки, чтобы облегчить вашу жизнь. Начните с чтения руководства здесь.

Что-то вроде этого?

UPDATE users t2 SET t2.traffic = t1.sum_traffic FROM
 (SELECT sum(t1.traffic) t1.sum_traffic FROM stats.traffic t1)
WHERE t1.id = t2.id;
Другие вопросы по тегам