我在 Postgres 9.4 中工作。我有一个表,其中包含一个名为 include_in_rct
的 bool 字段,大约有 5000 行。我想在所有现有行上随机将此值指定为 true 或 false,任一方向的概率均为 50%。我可以在 Postgres 中执行此操作吗?
我需要做类似的事情:
UPDATE mytable SET include_in_rct(<random boolean>)
或者我可以将每一行的值设置为 False,然后执行如下操作:
UPDATE mytable SET include_in_rct(FALSE)
UPDATE mytable SET include_in_rct(TRUE) WHERE id IN <some random set of 50% of IDs>
什么是最好的方法?
最佳答案
我可以想到两种方法:
首先使用random()
update mytable
set include_in_rct = random() > 0.5;
这不一定有精确 50% 的分布。
要获得精确的 50/50 分布,您可以使用:
update mytable
set include_in_rct = (rn % 2 = 0)
from (
select id, row_number() over ( order by random() ) as rn
from mytable
) x
where x.id = mytable.id;
这假定 id
是该表的主键。
然而,第一个会更快,但对于只有 5000 行,这无关紧要。
关于postgresql - Postgres : insert random boolean value into field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40042995/