我需要将此查询重复100次。我想我应该使用循环功能,但是没有找到解决方法。
select case when DBMS_RANDOM.value >= 0 and DBMS_RANDOM.value<=0.053 then 1
when DBMS_RANDOM.value > 0.053 and DBMS_RANDOM.value <= 0.097 then 2
when DBMS_RANDOM.value > 0.097 and DBMS_RANDOM.value <= 0.142 then 3
end random_groups
from temp_trt;
这是temp_trt的样本数据 enter image description here
答案 0 :(得分:2)
每次调用DBMS_RANDOM.value()
都会返回一个不同的值。因此,不能保证,任何通话都将落在您的任何范围内。实际上,从统计学上讲这不太可能。因此,在大多数情况下,由于未定义ELSE分支,因此将返回NULL。
这里是生成一百个随机值的替代解决方案。
with dr as (
select DBMS_RANDOM.value val
from dual
connect by level <= 100
)
select dr.val
, case when dr.val >= 0 and dr.val<=0.053 then 1
when dr.val > 0.053 and dr.val <= 0.097 then 2
when dr.val > 0.097 and dr.val <= 0.142 then 3
else 4
end random_groups
from dr
;
鉴于您的代码定义分支范围的方式,大多数random_groups
将是4
。
您发布的代码(玩具?)不清楚TEMP_TRT的作用,所以我决定忽略它。如果您不满意,请编辑您的问题以添加更多详细信息
答案 1 :(得分:0)
您可以将select level ... connect by level >= 100
结构的行生成技术用作
select level, rg.random_groups
from
( select case when DBMS_RANDOM.value >= 0 and DBMS_RANDOM.value<=0.053 then 1
when DBMS_RANDOM.value > 0.053 and DBMS_RANDOM.value <= 0.097 then 2
when DBMS_RANDOM.value > 0.097 and DBMS_RANDOM.value <= 0.142 then 3
end random_groups
from dual ) rg
connect by level <= 100