Обновление столбца postgresql случайным элементом из списка строк - PullRequest
0 голосов
/ 15 января 2020

Я хотел бы произвольно обновить столбец register_party каждой строки в моей таблице с именем table_name на строку из этого списка ['республиканец', 'демократ']. Я сталкиваюсь с синтаксической ошибкой. Как я могу исправить запрос, чтобы он достиг цели.

 Update table_name set registered_party =
  select from (unnest(ARRAY['republican','democrat'])
   FROM generate_series(1, 10)
  ORDER BY random() )
  LIMIT 10;

1 Ответ

0 голосов
/ 16 января 2020

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

SELECT CASE WHEN random() > 0.5 THEN 'republican' ELSE 'democrat' END AS party
FROM generate_series(1, 10) AS g(i)

Выводит что-то вроде следующего:

 party
------------
 democrat
 republican
 republican
 democrat
 democrat
 democrat
 republican
 republican
 democrat
 republican

Ваш последний оператор обновления будет выглядеть следующим образом.

UPDATE table_name
SET registered_party = (
  SELECT CASE WHEN random() > 0.5 THEN 'republican' ELSE 'democrat' END
  WHERE table_name.id = table_name.id
); 

Вам нужно предложение WHERE в подвыборке. В противном случае он выберет либо «демократа», либо «республиканца», а затем назначит каждую запись в таблице этой партии. Вы хотите, чтобы каждая строка была или-или.

...