首页 > 解决方案 > SQL 查询:构造控制组

问题描述

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

数据集#1:

ZIP | race | count |
--------------------
30218 | White  |  59   
30218 | Black  |  23  
30219 | White  | 78  
30219 | Black  | 14  
...

数据集#2:

id | ZIP | race | outcome
-------------------  
001 | 30218 | White | 23.3  
002 | 30219 | Black | 46.1  
...

目标是有一个输出返回数据集 #2 的子集,其中包含来自 ZIP 30218 的 59 个白人个体、来自 ZIP 30218 的 23 个黑人个体等。

要使用的示例 SQL 代码或一般策略都会有所帮助。谢谢

标签: sqlpostgresql

解决方案


您可以使用 row_number 窗口函数按某些条件对行进行编号,然后将其连接到数据集 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
;

推荐阅读