전산Tip/Oracle
[ORACLE] 랜덤 분포
모던아트
2011. 11. 4. 16:39
반응형
WITH V1 AS
(
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL UNION ALL
SELECT NULL NO FROM DUAL
)
SELECT CASE WHEN RND_P = 0 THEN 0 ELSE ((V_RND - RND_P_S_L) * (1/TCNT) / RND_P) + RT_L END AS V_RND2
, A.*
FROM (
SELECT B.V_RND
, A.*
, LAG(RND_P_S,1,0) OVER (ORDER BY NO) AS RND_P_S_L
, MAX(NO) OVER () AS NO_MAX
FROM (
SELECT A.*
, SUM(RND_P) OVER (ORDER BY NO) AS RND_P_S
FROM (
SELECT A.*
, LAG(RT,1,0) OVER (ORDER BY NO) AS RT_L
, SUM(RND) OVER (ORDER BY NO) AS RND_S
, RND / SUM(RND) OVER () AS RND_P
FROM (
SELECT ROWNUM AS NO
, COUNT(*) OVER () AS TCNT
, DBMS_RANDOM.VALUE AS RND
, ROWNUM / COUNT(*) OVER () AS RT
FROM V1,V1
) A
) A
) A
, (SELECT 0.9 AS V_RND FROM DUAL) B
--WHERE A.RND_P_S <= B.V_RND
) A
--WHERE NO = NO_MAX
;