修复MySQL计数查询中的错误

修复MySQL计数查询中的错误,mysql,sql,Mysql,Sql,我有一个名为tbl_pet_owners的MySQL表: +----+--------+----------+--------+--------------+ | id | name | pet | city | date_adopted | +----+--------+----------+--------+--------------+ | 1 | jane | cat | Boston | 2017-07-11 | | 2 | jane | d

我有一个名为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   |
+----+--------+----------+--------+--------------+
在上一篇堆栈溢出帖子中,我请求使用COUNT获得每个城市的宠物数量,但是如果一个人拥有两个或更多相同类型的宠物,那么这些宠物将被计算为一个。宠物类型列在另一个名为tbl_宠物类型的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#U宠物#U所有者时:

+----+------+-----+--------+--------------+
| id | name | pet | city   | date_adopted |
+----+------+-----+--------+--------------+
|  3 | jane | cat | Boston | 2017-06-11   |
+----+------+-----+--------+--------------+
返回的结果是:

Boston 5
NYC    1
它们应该是:

Boston 4
NYC    1
因为简所有的宠物都是同一类型的

简的猫似乎被算作个体,但它们只应算作一只,因为这两只猫属于同一类型


关于如何解决这个问题,有什么建议吗?

我忘了在宠物类型表中添加了一行,将金鱼映射到海洋生物,所以吉姆的金鱼被计数两次。因此,Boston返回的是5而不是4。

您可以在内部查询中添加SELECT DISTINCT。 DISTINCT将删除重复的宠物(即,如果相同,则主人有2只或更多)


你能自己运行内部查询并发布结果吗?你确定所有的字段都是相同的,因为它们是字符串,你可以在里面有空格或大写,这让人困惑。我想出来了。我忘了我在pet_类型表中添加了一行,将金鱼映射到海洋生物,所以吉姆的金鱼被计数两次。因此,波士顿返回的是5而不是4。很好,很高兴它被修复了!请结束这个问题。
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;