2017-07-06 69 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