我有一张包含100万条记录和670组的表格。我需要为每个组提取特定的样本量。
示例:如果employee1执行了200个任务,那么我必须提取132个样本。员工2执行了300项任务,然后我必须为所有670名员工提取169个样本等等。预期的总样本数量将是每个员工的总样本任务总和。
emp total_task sample_task
1 200 132
2 300 169
注意:我需要每组的原始数据,即来自200 + 300总记录的所有132 + 169个随机样本。
请帮忙。
答案 0 :(得分:1)
因此,我们首先创建您的样本大小表 - 您只需要样本大小,而不是总大小(这在您的数据中)。
create table sample_size as
select 1 emp, 132 sample_size from dual union all
select 2 emp, 169 sample_size from dual;
我们模拟了一些数据:
create table task as
select 1 emp, rownum task_id from dual connect by level <= 200 union all
select 2 emp, rownum task_id from dual connect by level <= 300
;
您在您的EMP上划分的分析函数ROW_NUMBER
并按随机顺序排序。
考虑仅使用rown mumber小于或等于样本大小的样本。
with smpl as (
select task.EMP, task.TASK_ID,
case when
row_number() over (partition by task.EMP order by dbms_random.value) <=
sample_size.sample_size then 'Y' else 'N' end as is_sample
from task left outer join sample_size on task.emp = sample_size.emp
)
select EMP, TASK_ID
from smpl
where is_sample = 'Y';