Postgresql: Почему SET col = MAX(col2) не работает

#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. Ладно, понял! Я буду более ясен, если опубликую еще один 🙂