2016-09-26 70 views
0

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

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

使用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

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; 
+0

没错这是一个另一种方式来做到这一点,我尝试,但在我的情况RANDOM()已更新以及我的表。 – xCloudx8