SQL查询:构造控制组

SQL查询:构造控制组,sql,postgresql,Sql,Postgresql,我有两个数据集。第一个数据集包含两个唯一标识的特征(这里是ZIP和race)以及一个名为count的变量。第二个数据集包含个人信息——ZIP、种族和一些结果变量。我的目标是构造第二个数据集的子集,其中某个ZIP/种族组合的观察数是第一个数据集的计数。为了说明这一点: 数据集1: 拉链|种族|计数| ---------- 30218 |白色| 59 30218 |黑色| 23 30219 |白色| 78 30219 |黑色| 14 ... 数据集2: id | ZIP |种族|结果 -------

我有两个数据集。第一个数据集包含两个唯一标识的特征(这里是ZIP和race)以及一个名为count的变量。第二个数据集包含个人信息——ZIP、种族和一些结果变量。我的目标是构造第二个数据集的子集,其中某个ZIP/种族组合的观察数是第一个数据集的计数。为了说明这一点:

数据集1:

拉链|种族|计数| ---------- 30218 |白色| 59 30218 |黑色| 23 30219 |白色| 78 30219 |黑色| 14 ... 数据集2:

id | ZIP |种族|结果 ---------- 001 | 30218 |白色| 23.3 002 | 30219 |黑色| 46.1 ... 目标是有一个输出,返回数据集2的子集,其中59个白人来自ZIP 30218,23个黑人来自ZIP 30218,等等


可以使用示例SQL代码,也可以使用一般策略。谢谢

您可以使用“行数”窗口功能按某些标准对行进行编号,然后将其加入数据集1。注意,我在这里将count重命名为n,以避免使用关键字:

SELECT id, 
       sub.zip, 
       sub.race, 
       sub.outcome 
FROM
  (
    SELECT id, 
           zip, 
           race, 
           outcome, 
           row_number() OVER (partition by zip, race ORDER BY id) -- You can order by whatever you want
    FROM data_set_2
  ) sub
JOIN data_set_1 ON data_set_1.zip = sub.zip 
               AND data_set_1.race = sub.race 
               AND data_set_1.n >= row_number -- this will limit the results
;

你想要随机抽样还是重复抽样?