С CTE, который возвращает суммы:
with cte as (
select
sum(amount) sum_amount,
',' || string_agg(cast(d.id as varchar), ',') || ',' ids
from data_table d inner join update_table u
on u.id = d.id
group by d.sysid
)
update update_table u
set sum_amount = c.sum_amount
from cte c
where c.ids like '%,'|| cast(u.id as varchar) || ',%'
См. Демоверсию .Результаты:
> id | amount | sum_amount
> -: | -----: | ---------:
> 1 | 200 | 600
> 2 | 400 | 600
> 3 | 150 | 150