postgreSQL中特定列值计数的采样

postgreSQL中特定列值计数的采样,postgresql,sampling,Postgresql,Sampling,我有一个带有一组值的表格,表格示例如下 ID | Customer_name | workorder 1 | abc | dispatch 2 | xyz | not_dispatch 3 | jdk | dispatch 总共有100万行。。现在,我想将这个数据集采样到5000行,我希望样本中有3400个工单为“not_dispatch”,1600个为“dispatch”。 在PostgreS

我有一个带有一组值的表格,表格示例如下

ID  |  Customer_name  | workorder
1   |    abc          | dispatch
2   |    xyz          | not_dispatch
3   |    jdk          | dispatch     
总共有100万行。。现在,我想将这个数据集采样到5000行,我希望样本中有3400个工单为“not_dispatch”,1600个为“dispatch”。
在PostgreSQL中如何做到这一点。

远没有效率,但很有效:

SELECT *
FROM (
  SELECT * FROM my_table
  WHERE workorder = 'dispatch' -- other filters
  ORDER BY random() LIMIT 1600) sub1
UNION
SELECT *
FROM (
  SELECT * FROM my_table
  WHERE workorder = 'not_dispatch' -- other filters
  ORDER BY random() LIMIT 3400) sub2;

那么你想要一个5000条记录的样本,3400条不发送,1600条发送?是的,我只是想从1M行中抽取5000条记录。。3400未发货,1600已发货,您想以任何特定方式取样吗?从这么多记录(100万条)中随机抽取样本可能效率不高。我不确定这是否能回答您的问题,但对特定客户名称进行抽样,但我不确定系统随机抽样或普通随机抽样是否更好。我想要发货和非发货的正确表示,我没有考虑不同的客户,但这也很好。我选择3400和1600,因为我使用了计算方法来计算总调度数,而非调度数来计算比率,然后计算出5000行,3400和1600更合适。但这是一种非常幼稚的方法。。如果你能帮我找到更好的方法,我会很高兴的。