postgresql - Postgres : insert random boolean value into field?

标签 postgresql

我在 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/

相关文章:

postgresql - 如何在 PostgreSQL 中聚合多行的多列?

sql - 如何从 PostgreSQL 中的文件名获取文件扩展名?

SQL 查询按两个不同的列分组

ruby-on-rails - PGError : ERROR: invalid byte sequence for encoding "UTF8

mysql - NodeJS,将来自 MySQL 和 PostgreSQL 的数据存储在 SQLite 中

java - 处理 JPA 期间查询的正确方法是什么?

arrays - rails 3 postgres 数组支持

postgresql - 无法恢复 postgres 数据库

optimization - postgres中的Seq Scan和Bitmap堆扫描有什么区别?

javascript - 将 Koa 与 bluebird 和 pg 一起使用