#sql #postgresql #set #sql-update #max
Вопрос:
Я написал код в postgresql, который работает в инструкции select, но не в инструкции update… Я не понимаю, почему это не работает и как это сделать. Вот мой код:
UPDATE netflix_tt_serie
SET total_num_parts = MAX(num_parts) OVER(PARTITION BY num_title)
С этими колонками:
num_title: 11 222 33333 444
num_parts: 12 123 12345 123
Таким образом, результат, который я хочу (и это тот, который я получаю в инструкции select), должен быть:
total_num_parts: 22 333 55555 333
(Я добавил пробел, когда num_title изменился здесь, просто чтобы было понятнее) Большое вам спасибо за вашу помощь!!
Комментарии:
1. Чтобы избежать несоответствия данных, вместо этого создайте представление.
2. Действительно неясно, как ваши результаты рассчитываются на основе выборочных данных.
Ответ №1:
Вы можете сделать это несколькими способами. Типичным методом является:
UPDATE netflix_tt_serie nts
SET total_num_parts = max_num_parts
FROM (SELECT num_title, MAX(num_parts) as max_num_parts
FROM netflix_tt_serie
GROUP BY num_title
) x
WHERE x.num_title = nts.num_title;
Ваш синтаксис не разрешен, поскольку SQL в целом не разрешает функции агрегирования или функции окон в UPDATE
операторах.
Комментарии:
1. Супер круто это работает !! Большое спасибо 😀 (я увидел ваш флаг «неясно» на моем вопросе, извините, что это был мой первый пост)
2. @TristanTHOMAS . . . Сам вопрос кажется довольно ясным (именно поэтому я дал ответ). Проблема в том, что примерные данные неясны, и я не могу понять, что это должно означать.
3. Ладно, понял! Я буду более ясен, если опубликую еще один 🙂