我想使用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
您能帮我修改使用setseed
的查询并在每行中返回不同的random_id
吗?
答案 0 :(得分:5)
您必须以不同方式使用setseed
。在您的示例中,generate_series()
也被误导了。你需要使用类似的东西:
select setseed(0.5);
select col_a,col_b,col_c, random() as random_id from test_input;
如果要获得分配给同一行的相同随机数,则必须先排序行,引用documentation:
如果指定了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;
这里我假设col_a, col_b, col_c
的组合是唯一的。如果不是这种情况,则必须首先向表中添加具有唯一ID的另一列,并在上面的查询中按此列进行排序。