我正在使用 for 循环创建 10 行。在 for 循环中,我使用 dbms_random.value 生成 0 到 10 之间的整数。我想以这样一种方式对 dbms_random 方法进行编码,其中每行有 30% 的机会获得 0。
问问题
110 次
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,则将其视为 0,否则将其视为“生成值”-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 回答