sql 查询动态样本大小的分层抽样
sql query for stratified sampling with dynamic sample size
假设我们有一个 table 这种格式:
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 个实例。任何帮助表示赞赏。请记住,我有很多阶层,硬编码是不可能的。我
您可以使用 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;
假设我们有一个 table 这种格式:
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 个实例。任何帮助表示赞赏。请记住,我有很多阶层,硬编码是不可能的。我
您可以使用 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;