使用 PostgreSQL 列表中的值随机填充 table 列
Populate a table column randomly with values from a list in PostgreSQL
我想用以下值随机填充 table 中的一列:
可用,暂停,部分首付,Sold/Unavailable,令牌
我尝试使用以下命令,但它会用它获得的第一个值填充整个列。
update mytable
set sold_status = (select (array['Available', 'On Hold', 'Partial Downpayment', 'Sold/Unavailable', 'Token Recieved'])[floor(random() * 5 + 1)])
我知道如何使用编程语言实现这一点,但我更喜欢 PostgreSQL 查询来实现这一点。
Postgres 认为 运行 random()
只是帮了你一次忙——忘记了 random()
是一个可变函数。
您可以使用 case
解决此问题:
update mytable
set sold_status = (case (random()*5)::int when 0 then 'Available' when 1 then 'On Hold' when 2 then 'Partial Downpayment' when 3 then 'Sold/Unavailable' when 4 then 'Token Recieved' end);
Here 是一个 db<>fiddle.
虽然 PostgreSQL 跟踪简单表达式的波动性,但它不跟踪不包含对外部查询的引用的子 selects 的波动性。您可以通过引入对外部查询的人工引用来解决此问题,但在您的情况下,您首先不需要子 select,所以只需删除它即可。
update mytable
set sold_status = (array[
'Available', 'On Hold', 'Partial Downpayment', 'Sold/Unavailable', 'Token Recieved'
]) [floor(random() * 5 + 1)];
我想用以下值随机填充 table 中的一列: 可用,暂停,部分首付,Sold/Unavailable,令牌
我尝试使用以下命令,但它会用它获得的第一个值填充整个列。
update mytable
set sold_status = (select (array['Available', 'On Hold', 'Partial Downpayment', 'Sold/Unavailable', 'Token Recieved'])[floor(random() * 5 + 1)])
我知道如何使用编程语言实现这一点,但我更喜欢 PostgreSQL 查询来实现这一点。
Postgres 认为 运行 random()
只是帮了你一次忙——忘记了 random()
是一个可变函数。
您可以使用 case
解决此问题:
update mytable
set sold_status = (case (random()*5)::int when 0 then 'Available' when 1 then 'On Hold' when 2 then 'Partial Downpayment' when 3 then 'Sold/Unavailable' when 4 then 'Token Recieved' end);
Here 是一个 db<>fiddle.
虽然 PostgreSQL 跟踪简单表达式的波动性,但它不跟踪不包含对外部查询的引用的子 selects 的波动性。您可以通过引入对外部查询的人工引用来解决此问题,但在您的情况下,您首先不需要子 select,所以只需删除它即可。
update mytable
set sold_status = (array[
'Available', 'On Hold', 'Partial Downpayment', 'Sold/Unavailable', 'Token Recieved'
]) [floor(random() * 5 + 1)];