修复MySQL计数查询中的错误
我有一个名为tbl_pet_owners的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
+----+--------+----------+--------+--------------+
| 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;