SQL :获取具有两个突变的数据计数

SQL : get count of data which have both mutations

我有 2 个表 MutationsMedications

我需要一个 med 名称中同时具有 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

如何计算同时发生突变的成员数量?

一种方法是两级聚合:

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;

不清楚您需要什么计数,您的查询实际上是获取具有两种突变的药物...

如果您想要给定查询的计数,请使用子查询

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