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

嵌套SQL查询,其中一个表的id与存在两个特定项的另一个表匹配,sql,postgresql,amazon-redshift,Sql,Postgresql,Amazon Redshift,我有两个表:person\u demographics、person\u social\u profile,它们由person\u id列链接 p_d代表独特的人,p_s_p代表他们的社交网络账户 p_d每个person_id只有一个条目,但p_s_p每个person_id有许多行 我需要统计一下db中有多少人居住在德国,这是从p_d的“国家”栏中提取的,p_s_p中也有一个来自facebook的社交账户,还有一个twitter的社交账户 到目前为止,我已经 select person_id f

我有两个表:person\u demographics、person\u social\u profile,它们由person\u id列链接

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

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

我需要统计一下db中有多少人居住在德国,这是从p_d的“国家”栏中提取的,p_s_p中也有一个来自facebook的社交账户,还有一个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')
从psp中的person\u social\u profiles中选择*,其中psp.person\u id和(psp.source='facebook'或psp.source='twitter')

然后我有了在person_id上进行groupbykey的想法,并对超过1个条目的组进行计数,以获得居住在德国且同时拥有facebook和twitter的独特用户的计数,但在一个查询中将所有用户链接在一起时遇到了困难。如有任何建议,将不胜感激,谢谢

我建议采用两种聚合级别:

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;