숫자 n을, r의 비율로 랜덤하게 생성한다.
-- 숫자 n을, r의 비율로 랜덤하게 생성
with t as (
select 1 n, 1 r from dual union all
select 2, 2 from dual union all
select 5, 4 from dual union all
select 8, 10 from dual union all
select 9, 8 from dual)
select a.n
, count(*)
from (select n
, r
, nvl(sum(r) over (order by rownum rows between unbounded preceding and 1 preceding),0) s
, sum(r) over (order by rownum)-1 e
from t) a
left join
(select trunc(dbms_random.value(0,mx)) v
from (select sum(r) mx from t)
connect by level<=mx*10000
) b
on b.v between a.s and a.e
group by a.n
order by a.n
N COUNT(*)
---------- ----------
1 9984
2 20168
5 39699
8 99928
9 80221