用随机数更新表

时间:2016-09-26 15:30:37

标签: sql postgresql-9.5

我需要用随机数更新我的表,这是我的表:

chr pos ref alt id_disease
chr1 123 A   A     NULL
chr2 456 A   T     NULL

我想用1到30000079的随机数更新疾病列。

要获得这个:

chr pos ref alt id_disease
chr1 123 A   A     5024
chr2 456 A   T     300045

是否有一些随机函数?

2 个答案:

答案 0 :(得分:2)

使用RANDOM()

UPDATE yourTable
SET id_disease = FLOOR(RANDOM() * 30000079) + 1

<强>解释

Postgres'RANDOM()函数返回0.0 <= x < 1.0范围内的数字。在上面的查询中,这意味着当RANDOM()返回0时会出现最小值,并将1作为值。当RANDOM()返回0.999999之类的内容时会出现最高值,这会使值略低于30000079FLOOR功能会将其降至30000078,但我们会向其添加1,以便将其恢复为30000079,即您的最高值。

答案 1 :(得分:0)

我遇到的问题是所有行都使用相同的值进行更新。发生这种情况是因为随机语句只运行一次。我必须先在临时表中生成随机数,然后更新实际表:

WITH r AS (SELECT id, floor(random() * 30000079) AS rnd FROM table_name)
UPDATE table_name AS t
SET column_name = r.rnd
FROM r WHERE r.id = t.id;