Спасибо за ответы, это заставило меня задуматься.В итоге я смог сделать то, что хотел, используя временную вторую таблицу.
Вот что я сделал.
Создание данных теста:
CREATE TABLE test (id INT PRIMARY KEY,
price DECIMAL,
item CHAR(1),
total DECIMAL);
INSERT INTO test VALUES( 0, 1.0, 'A', NULL ),
( 1, 1.0, 'A', NULL ),
( 2, 0.1, 'B', NULL ),
( 3, 1.0, 'B', NULL ),
( 4, 2.1, 'B', NULL ),
( 5, 1.0, 'A', NULL ),
( 6, 2.0, 'C', NULL );
Создание временной таблицы:
SELECT SUM(price), item INTO temp_table FROM test GROUP BY item;
Обновление:
UPDATE test SET total = sum FROM temp_table WHERE temp_table.item=test.item;
Очистка:
DROP TABLE temp_table;
Что дает:
select * FROM test ORDER BY id;
id | price | item | total
----+-------+------+-------
0 | 1.0 | A | 3.0
1 | 1.0 | A | 3.0
2 | 0.1 | B | 3.2
3 | 1.0 | B | 3.2
4 | 2.1 | B | 3.2
5 | 1.0 | A | 3.0
6 | 2.0 | C | 2.0
(7 rows)