Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Contar ocorrências com base em várias condições para duas tabelas


Se eu te seguir corretamente, você pode usar exists para filtrar em table2 :
select count(*) as cnt
from table1 t1
where t1.sex = 1 and t1.age = 3 and exists (
    select 1
    from table2 t2 
    where t2.id = t1.id and t2.var1 = 'Wisconsin'
)

Isso conta as linhas na primeira tabela para as quais pelo menos uma linha na segunda tabela tem Wisconsin. Se, por outro lado, você quiser garantir que todas as linhas na segunda tabela satisfazem a condição, então uma opção é:
select count(*) as cnt
from table1 t1
inner join (
    select id
    from table2
    group by id
    having min(var1 <=> 'Wisconsin') = 1
) t2 on t2.id = t1.id
where t1.sex = 1 and t1.age = 3