postgres随机使用setseed

use*_*355 5 random postgresql sample random-seed

我想在表中添加一个随机数列setseed.

原始表结构 (test_input) col_a,col_b,col_c

期望的输出 (test_output) col_a, col_b, col_c, random_id

以下内容random_id在所有行上返回相同的内容,而不是在每行中返回不同的值.

select col_a,col_b,col_c,setseed(0.5),(
     select random() from generate_series(1,100) limit 1
     ) as random_id 
from test_input
Run Code Online (Sandbox Code Playgroud)

你能帮我修改一下使用的查询setseedrandom_id在每一行中返回一个不同的查询吗?

Tom*_*eif 5

你必须以setseed不同的方式使用.generate_series()在你的例子中也被误解了.你需要使用类似的东西:

select setseed(0.5);

select col_a,col_b,col_c, random() as random_id from test_input;
Run Code Online (Sandbox Code Playgroud)

如果要获得分配给同一行的相同随机数,则必须先对行进行排序,引用文档:

如果指定了ORDER BY子句,则返回的行按指定的顺序排序.如果未给出ORDER BY,则以系统发现最快生成的顺序返回行.

您可以使用:

select setseed(0.5);

select *, random() as random_id from (        
select col_a,col_b,col_c from test_input order by col_a, col_b, col_c) a;
Run Code Online (Sandbox Code Playgroud)

在这里,我假设这种组合col_a, col_b, col_c是独一无二的.如果不是这种情况,则必须首先向表中添加具有唯一ID的另一列,并在上面的查询中按此列进行排序.