Обновите все строки, затронутые группой, с помощью

У меня есть следующий запрос с использованием PostgreSql:

SELECT SUM(table.a) 
FROM table 
GROUP BY table.b
HAVING SUM(table.a) > x;

И теперь мне нужно обновить столбец во всех строках, затронутых прецедентным запросом.

Я попробовал следующее решение:

UPDATE table 
SET c = 'value' 
WHERE (SELECT SUM(table.a) 
       FROM table 
       GROUP BY table.b) > x;

но я получаю следующую ошибку

Более строки, возвращаемой подзапросом, используемым в качестве выражения

Я не могу найти решение для обновления столбца во всех строках, затронутых группой. Если кто-нибудь может показать мне путь, это было бы очень признательно.


person Vetouz    schedule 30.07.2018    source источник
comment
Не могли бы вы опубликовать свою ошибку на английском языке?   -  person dWinder    schedule 30.07.2018
comment
извините, я отредактировал свой пост   -  person Vetouz    schedule 30.07.2018
comment
Пожалуйста, также отметьте механизм базы данных, который вы используете, все они имеют различия в их синтаксисе, и это помогает узнать, на какой из них ориентироваться.   -  person Sami Kuhmonen    schedule 30.07.2018


Ответы (1)


Вы хотите обновить строки таблицы только для тех строк, которые имеют table.b в списке значений тех, чьи суммы значений столбца table.a превышают заданный вами x

Итак, я считаю, что вы хотите использовать это:

UPDATE TABLE
   SET c = 'value'
 WHERE b IN (SELECT b
               FROM TABLE
              GROUP BY table.b
             HAVING SUM (table.a) > x));
person Goran Kutlaca    schedule 30.07.2018
comment
Вы можете упростить это, просто вернув b из самого внутреннего запроса и отбросив средний - person Sami Kuhmonen; 30.07.2018
comment
@SamiKuhmonen Ты абсолютно прав! Спасибо за ваш вклад :) - person Goran Kutlaca; 30.07.2018