Tengo dos tablas: person_demographics, person_social_profile, que están vinculadas por la columna person_id
p_d representa personas únicas, p_s_p representa sus cuentas de redes sociales
p_d solo tendrá una entrada por person_id, pero p_s_p tendrá muchas filas por la misma person_id
Necesito obtener un recuento de cuántas personas en la base de datos viven en Alemania, extraído de la columna 'país' en p_d donde también existe una cuenta social en p_s_p de facebook, Y también existe una cuenta social para twitter.
tengo hasta ahora
select person_id from person_demographics pd where pd.country like '%Germany%' or pd.country = 'DE'para seleccionar el conjunto de person_id's para usuarios que viven en Alemania, y
select * from person_social_profiles psp where psp.person_id <is in previous results> and (psp.source = 'facebook' or psp.source = 'twitter')Entonces tengo la idea de hacer groupbykey en person_id y contar los grupos con > 1 entradas, para obtener el recuento de usuarios únicos que viven en Alemania y tienen Facebook y Twitter, pero tengo problemas para encadenarlo todo en una sola consulta. Cualquier sugerencia sería muy apreciada, gracias.
Yo sugeriría dos niveles de agregación:
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;