8

テーブルに乱数を使用して列を追加したいと思い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

4

1 に答える 1

7

別の方法で使用する必要がありますsetseed。あなたの例でもgenerate_series()誤用されています。次のようなものを使用する必要があります。

select setseed(0.5);

select col_a,col_b,col_c, random() as random_id from test_input;

同じ行に割り当てられた同じ乱数を取得する場合は、ドキュメントを引用して、最初に行を並べ替える必要があります。

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 を持つ別の列をテーブルに追加し、上記のクエリでこの列で並べ替える必要があります。

于 2014-03-13T18:11:43.027 に答える