从依赖 Table 关系中计算多个值

Counting Multiple Values from Dependent Table Relationship

我正在处理一个问题,我正在计算满足几个不同条件的从属 table 中出现的实例数。解决此问题的示例如下:

Owners Table:
 - owner_id
 - owner_name


Pets Table:
 - pet_id
 - owner_id
 - category

我有兴趣查找有关某个用户的某个类别的宠物数量的信息。例如,如果我想知道特定用户拥有的哺乳动物数量,我可以执行以下查询:

SELECT
   owners.*,
   mammals.mammal_count
FROM
   owners
JOIN (
   SELECT
      owner_id,
      COUNT(*) as mammal_count
   FROM
      pets
   WHERE
      category = 'mammal'
   GROUP BY
      owner_id
   ) mammals on mammals.owner_id = owners.id

这将 return 属于每个用户的哺乳动物数量。我感兴趣的是创建另一个查询,让我知道另一个条件出现了多少次,例如 'birds'。我知道我不能内部加入记录,因为所有者可能有也可能没有其中一个类别,如果他们没有,他们将被排除在结果之外。话虽如此,我已经尝试了多种外部联接,其中 none 似乎有效。

您可以使用条件聚合

select 
    o.owner_id,
    o.owner_name,
    sum(case when p.category = 'mammal' then 1 else 0 end) mammal_count,
    sum(case when p.category = 'birds' then 1 else 0 end) bird_count
from 
    owners o
    inner join pets p on p.owner_id = o.id
group by o.owner_id, o.owner_name

这也应该有效:

select 
    o.owner_id
    ,o.owner_name
    ,p.category
    ,[Count of Pets] = count(pet_id)

from owners o
left join pets p on p.owner_id = o.id

group by 
    o.owner_id
    ,o.owner_name
    ,p.category