嵌套SQL查询,其中一个表中的id与存在两个特定条目的另一个表匹配

时间:2017-04-20 22:15:45

标签: sql postgresql amazon-redshift

我有两个表:person_demographics,person_social_profile,由列person_id链接

p_d代表独特的人,p_s_p代表他们的社交网络帐户

p_d每个person_id只有一个条目,但p_s_p每个person_id会有很多行

我需要计算数据库中有多少人在德国生活,从“国家/地区”中提取。 p_d中的列,其中在facebook的p_s_p中也存在社交帐户,并且还存在twitter的社交帐户。

我到目前为止

select person_id from person_demographics pd
where pd.country like '%Germany%' or pd.country = 'DE'

为生活在德国的用户选择一组person_id,

select * from person_social_profiles psp where psp.person_id <is in previous results> and (psp.source = 'facebook' or psp.source = 'twitter')

然后我想到在person_id上做groupbykey并用&gt;对组进行计数。 1个条目,以获取生活在德国并拥有facebook和twitter的独特用户的数量,但在一个查询中将它们链接在一起时遇到问题。任何建议都将非常感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

我建议两个级别的聚合:

select count(*)
from (select pd.person_id
      from person_demographics pd join
           person_social_profiles psp
           on psp.person_id = pd.pser_id
      where (pd.country like '%Germany%' or pd.country = 'DE') and   
            psp.source in ('facebook', 'twitter')
      group by pd.person_id
      having count(distinct psp.source) = 2
     ) pd;