假设我们有一个格式如下的表:
id strata sample_size
1 s1 2
2 s1 2
3 s1 2
4 s2 1
5 s2 1
....
从这个例子中,我们可以看到两个层次s1和s2。我想做的是分层抽样,样本量是最后一列。例如,我想从s1中随机抽取2个实例,从s2中随机抽取1个实例。感谢您的帮助。请记住,我有很多层次,硬编码是不可能的。I
您可以使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by strata order by rand()) as seqnum
from t
) t
where seqnum <= strata_size;