-1

我正在使用 for 循环创建 10 行。在 for 循环中,我使用 dbms_random.value 生成 0 到 10 之间的整数。我想以这样一种方式对 dbms_random 方法进行编码,其中每行有 30% 的机会获得 0。

4

1 回答 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 回答