在两个表中使用MySQL的COUNT

在两个表中使用MySQL的COUNT,mysql,sql,Mysql,Sql,我有一个名为tbl_pet_owners的MySQL表: +--------+----------+--------+ | name | pet | city | +========+==========+========+ | jane | cat | Boston | +--------+----------+--------+ | jane | dog | Boston | +--------+----------+--------+ | ja

我有一个名为tbl_pet_owners的MySQL表:

+--------+----------+--------+
| name   | pet      | city   |
+========+==========+========+
| jane   | cat      | Boston |
+--------+----------+--------+
| jane   | dog      | Boston |
+--------+----------+--------+
| jack   | cat      | Boston |
+--------+----------+--------+
| jim    | snake    | Boston |
+--------+----------+--------+
| jim    | goldfish | Boston |
+--------+----------+--------+
| joseph | cat      | NYC    |
+--------+----------+--------+
我想使用COUNT来计算每个城市的宠物数量,但是如果一个人拥有两个或更多相同类型的宠物,那么这些宠物将被计算为一个。宠物类型列在另一个名为tbl_宠物类型的MySQL表中:

+----------+---------+
| pet      | type    |
+==========+=========+
| cat      | mammal  |
+----------+---------+
| dog      | mammal  |
+----------+---------+
| snake    | reptile |
+----------+---------+
| goldfish | fish    |
+----------+---------+
因此,由于简的猫和狗属于同一类型,它们被认为是一种宠物。 在本例中,结果将是:

Boston 4
NYC    1
关于如何实现这一点有什么建议吗?

看看这是否有效

SELECT PO.city, COUNT(DISTINCT PO.name, PT.type) 
FROM tbl_pet_owners PO
JOIN tbl_pet_types PT ON PO.pet = PT.pet 
GROUP BY PO.city
看看这是否有效

SELECT PO.city, COUNT(DISTINCT PO.name, PT.type) 
FROM tbl_pet_owners PO
JOIN tbl_pet_types PT ON PO.pet = PT.pet 
GROUP BY PO.city

可以对其进行优化,但可以:

select count(*), result.city from (
    select owners.city, types.type, owners.name
    from tbl_pet_owners owners
    left join tbl_pet_types types on owners.pet = types.pet group by owners.city, owners.name, types.type
) as result
group by result.city;

可以对其进行优化,但可以:

select count(*), result.city from (
    select owners.city, types.type, owners.name
    from tbl_pet_owners owners
    left join tbl_pet_types types on owners.pet = types.pet group by owners.city, owners.name, types.type
) as result
group by result.city;

你是按城市、所有者和宠物类型分组的吗?是的。没错,到目前为止你都试过什么?希望加入tbl_宠物类型表。按城市从tbl_宠物所有者组中选择城市、COUNTDISTINCT name、宠物。您尝试这样做时会得到什么?因此您是按城市、所有者和宠物类型分组的?是的。没错,到目前为止你都试过什么?希望加入tbl_宠物类型表。按城市从tbl_宠物所有者组中选择城市、COUNTDISTINCT name、宠物。尝试此操作时您会得到什么?