动态样本量分层抽样的sql查询

动态样本量分层抽样的sql查询,sql,postgresql,presto,Sql,Postgresql,Presto,假设我们有一个这样格式的表: 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您可以使用: select t.* from (select t.*,

假设我们有一个这样格式的表:

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

您可以使用:

select t.*
from (select t.*,
             row_number() over (partition by strata order by rand()) as seqnum
      from t
     ) t
where seqnum <= strata_size;