2017-07-06 55 views
0

我有以下MySQL表称为tbl_pet_owners:使用MySQL的COUNT两个表

+--------+----------+--------+ 
| name | pet  | city | 
+========+==========+========+ 
| jane | cat  | Boston | 
+--------+----------+--------+ 
| jane | dog  | Boston | 
+--------+----------+--------+ 
| jack | cat  | Boston | 
+--------+----------+--------+ 
| jim | snake | Boston | 
+--------+----------+--------+ 
| jim | goldfish | Boston | 
+--------+----------+--------+ 
| joseph | cat  | NYC | 
+--------+----------+--------+ 

我想使用COUNT让每个城市的宠物的数量,但如果一个人拥有两个或更多的宠物相同类型,那么这些宠物就算为一个。宠物类型列在另一个MySQL表称为tbl_pet_types:

+----------+---------+ 
| pet  | type | 
+==========+=========+ 
| cat  | mammal | 
+----------+---------+ 
| dog  | mammal | 
+----------+---------+ 
| snake | reptile | 
+----------+---------+ 
| goldfish | fish | 
+----------+---------+ 

如此以来,Jane的猫,狗都是同一类型的,他们认为一个宠物。 在这个例子中,结果将是:

Boston 4 
NYC 1 

就如何实现这一目标的任何提示?

+0

所以你被市,业主和PetType分组? –

+0

是的。这是正确的。 – Brinley

+0

你到目前为止尝试过什么?看看'加入''tbl_pet_types'表。 –

回答

0

可以优化,但工作原理:

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; 
2

看看是否有效。

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 
0
SELECT o.city, COUNT(DISTINCT o.name, t.type) 
FROM tbl_pet_owners o, tbl_pet_types t 
WHERE o.pet = t.pet 
GROUP BY city