首页 > 解决方案 > 使用 oracle sql 进行随机数据采样,数据生成

问题描述

我需要从人群中生成一些样本数据。我想在 Oracle 11g 数据库上使用 SQL 查询来做到这一点。

这是一个人口规模为 4 且样本规模为 2 的简单工作示例:

with population as (
    select 1 as val from dual union all 
    select 2 from dual union all 
    select 3 from dual union all 
    select 4 from dual)

select val from (
    select val, dbms_random.value(0,10) AS RANDORDER 
    from  population 
    order by randorder) 
where rownum <= 2

(oracle sample() 函数不适用于我的 WITH 子句)

但现在我,我想“升级”或增加我的样本数据。这样我就可以获得人口数据的 150% 样本数据(例如,人口规模 4 和样本规模 6)

有没有使用 SQL 查询实现此目的的好方法?

标签: sqloraclesampledata-generationpopulation

解决方案


你可以使用CONNECT BY

with population(val, RANDOMORDER) as (
    select level, dbms_random.value(0,10) AS RANDORDER 
    from dual
    connect by level <= 6
    ORDER BY RANDORDER
)
select val
FROM population
WHERE rownum <= 4;

db<>小提琴演示


推荐阅读