Это можно сделать в Oracle, используя аналитические функции; не знаю, будет ли этот код работать в PostgreSQL.
Создание целевой таблицы:
SQL> create table t23
2 as select deptno, cast (null as number(7,2)) max_sal from dept
3 /
Table created.
SQL>
Теперь обновление:
SQL> update t23
2 set max_sal = ( select sal from
3 ( select deptno, sal
4 , row_number() over (partition by deptno order by sal desc) rn
5 from emp )
6 where rn = 1
7 and deptno = t23.deptno )
8 /
6 rows updated.
SQL>
Вот результат:
SQL> select * from t23
2 /
DEPTNO MAX_SAL
---------- ----------
10 5000
20 3000
30 3750
40
50 4500
60
6 rows selected.
SQL>
Просто чтобы подтвердить результаты ...
SQL> select deptno, max(sal)
2 from emp
3 where sal is not null
4 group by deptno
5 order by deptno
6 /
DEPTNO MAX(SAL)
---------- ----------
10 5000
20 3000
30 3750
50 4500
SQL>