我有以下名为tbl_pet_owners的MySQL表:
+----+--------+----------+--------+--------------+
| id | name | pet | city | date_adopted |
+----+--------+----------+--------+--------------+
| 1 | jane | cat | Boston | 2017-07-11 |
| 2 | jane | dog | Boston | 2017-07-11 |
| 3 | jane | cat | Boston | 2017-06-11 |
| 4 | jack | cat | Boston | 2016-07-11 |
| 5 | jim | snake | Boston | 2017-07-11 |
| 6 | jim | goldfish | Boston | 2017-07-11 |
| 7 | joseph | cat | NYC | 2016-07-11 |
+----+--------+----------+--------+--------------+
在之前的Stack Overflow帖子中,我使用COUNT寻求帮助以获得每个城市的宠物数量,但如果一个人拥有两个或更多相同类型的宠物,那么这些宠物将被计为一个。宠物类型列在另一个名为tbl_pet_types的MySQL表中:
+----------+---------+
| pet | type |
+==========+=========+
| cat | mammal |
+----------+---------+
| dog | mammal |
+----------+---------+
| snake | reptile |
+----------+---------+
| goldfish | fish |
+----------+---------+
这是我到目前为止的代码:
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;
当我将第3行添加到tbl_pet_owners时:
+----+------+-----+--------+--------------+
| id | name | pet | city | date_adopted |
+----+------+-----+--------+--------------+
| 3 | jane | cat | Boston | 2017-06-11 |
+----+------+-----+--------+--------------+
返回的结果是:
Boston 5
NYC 1
他们应该是:
Boston 4
NYC 1
因为珍妮的所有宠物都属于同一类型。
似乎珍妮的猫被视为个体,但它们只应算作一只因为这两只猫属于同一类型。
有关如何解决此问题的任何提示?
答案 0 :(得分:1)
我忘了我在pet_types表中添加了一行,将金鱼映射到海洋生物,因此吉姆的金鱼被计算两次。因此波士顿返回5而不是4。
答案 1 :(得分:0)
您可以向内部查询添加SELECT DISTINCT。 DISTINCT将删除重复的宠物(即拥有2个或更多的所有者)
select count(*), result.city from (
SELECT DISTINCT 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;