从依赖 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
我正在处理一个问题,我正在计算满足几个不同条件的从属 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