SQL: получить количество данных, которые имеют обе мутации - PullRequest
0 голосов
/ 24 марта 2019

У меня есть 2 таблицы Mutations и Medications.

Мне нужно количество членов, у которых есть и mut1, и mut2 в названии медика.

SELECT 
    med.Name AS medicine, COUNT(*) AS count
FROM 
    Mutations mut
INNER JOIN 
    Medications med ON med.MemberId = mut.MemberId
WHERE 
    mut.Mutation IN ('mut1','mut2')
GROUP BY 
    med.Name
HAVING 
    COUNT(DISTINCT mut.Mutation) = 2

Как подсчитать тех членов, у которых есть обе мутации?

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Один метод - два уровня агрегации:

select med.name, count(*)
from (select med.name, m.memberid
      from medications med join
           mutations m
           on m.memberid = med.memberid
      where m.mutation in ('mut1', 'mut2')
      group by med.name, m.memberid
      having count(*) = 2
     ) m
group by med.name;
0 голосов
/ 24 марта 2019

Не ясно, какое количество вам нужно, ваш запрос фактически получает лекарства с обеими мутациями ...

Если вы хотите, чтобы количество вашего запроса использовалось подзапросом

SELECT COUNT(1)
FROM
(
    SELECT 
    med.Name AS medicine
    FROM 
        Mutations mut
    INNER JOIN 
        Medications med ON med.MemberId = mut.MemberId
    WHERE 
        mut.Mutation IN ('mut1','mut2')
    GROUP BY 
        med.Name
    HAVING 
        COUNT(DISTINCT mut.Mutation) = 2
) Q

Если вы хотите разделить счетчики Mut1 и mut2, используйте вариант

SELECT 
    med.Name AS medicine, 
    COUNT(CASE Mutation WHEN 'Mut1' THEN 1 END) AS CountMut1
    COUNT(CASE Mutation WHEN 'Mut2' THEN 1 END) AS CountMut2
FROM 
    Mutations mut
INNER JOIN 
    Medications med ON med.MemberId = mut.MemberId
WHERE 
    mut.Mutation IN ('mut1','mut2')
GROUP BY 
    med.Name
HAVING 
    COUNT(DISTINCT mut.Mutation) = 2
...