2016-09-26 78 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