我需要用随机数更新我的表,这是我的表:
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
是否有一些随机函数?
答案 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
之类的内容时会出现最高值,这会使值略低于30000079
。 FLOOR
功能会将其降至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;