Как обновить таблицу в postgres, чтобы добавить столбец заказа? - PullRequest
0 голосов
/ 19 апреля 2020

Я могу сделать оконную функцию, такую ​​как select *, rank() over (partition by column1 order by column2) from mytable, чтобы получить порядок строк, отсортированных по column2. Но если я добавил столбец order_column к mytable, как я могу UPDATE в этот столбец включить результаты оконной функции, чтобы новый order_column заполнялся результатами?

Таким образом, он обновит все существующие строки в mytable, но не добавит новые строки.

1 Ответ

0 голосов
/ 19 апреля 2020

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

UPDATE mytable AS t1
SET order_column = t2.rnk
FROM
(
    SELECT *, RANK() OVER (PARTITION BY column1 ORDER BY column2) rnk
    FROM mytable
) t2
WHERE t1.id = t2.id;

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

...