WHERE句random() > 0.5
を使用して、データのランダムな部分集合を選択することがよくあります。今私は、サブクエリでセット返された関数を使用するとき、私は全体のセットを取得するか、またはnone(WHERE random()> 0.5句が、セットが生成される前にと解釈されることを意味する) は、例えば:次のクエリがは、アカウントにセット全体を取るんのでサブクエリでrandom()を返す関数の動作が一貫しない
SELECT num
FROM (
SELECT unnest(Array[1,2,3,4,5,6,7,8,9,10]) num
) AS foo
WHERE random() > 0.5;
これは矛盾しているようだ:
SELECT num
FROM (
SELECT unnest(Array[1,2,3,4,5,6,7,8,9,10]) num
) AS foo
WHERE random() > 0.1 * num;
私は、これは矛盾しているか、それが意味をなすんので修正でしょうか?
注:
)(ランダム別にテストするために別の関数を見つけることができなかったが、おそらく私もgenerate_seriesで
あなたは 'EXPLAIN'上で実行することができますクエリ。その実行計画が異なるのは、最初のクエリで毎回 'random()'を実行しないのが最適だからですが、それは2番目のクエリで実行する必要があります。 – GavinCattell
2番目の文には、サブクエリのすべての結果と比較してランダムな値が含まれます。最初のものはあなたのサブクエリとは関係ありません。これは0.5に比べてランダムに生成された単一の数値です。 –