forループを使用して10行を作成しています。for ループ内で、dbms_random.value を使用して 0 から 10 までの整数を生成しています。各行が 30% の確率で 0 になるように dbms_random メソッドをコーディングしたいと考えています。
1 に答える
2
乱数発生器をそのまま使用すると、すべての数値に等しい確率が与えられます。したがって、特定の数値に高い確率または低い確率を与え、残りの数値の確率を公平に保ちたい場合は、数値を表す範囲を同じ方法で設定する必要があります。
したがって、30% の確率を 0 にし、残りの 10 個の数字は同じ確率になるようにする必要があります。N が数値の範囲全体である場合、x が数値 1 ~ 10 を表す場合、3*x は数値 0 を表します。したがって、スローされる数値の数は N = 10*x + 3*x = 13*x です。
したがって、生成される範囲は 13 の倍数である必要があります。
したがって、dbms_random が 0 ~ 12 の数字を生成するようにします。そして、「生成値」<=2 の場合は条件を設定し、それ以外の場合は「生成値」-2 とみなします
疑似コードは次のようになります
select case when T1.x>2
then T1.x-2
else 0
end case
from (select dbms_random(0,13) as x from Dummy) T1
于 2015-03-11T03:37:35.300 に答える