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)
你能帮我修改一下使用的查询setseed并random_id在每一行中返回一个不同的查询吗?
你必须以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的另一列,并在上面的查询中按此列进行排序.