【发布时间】:2017-12-15 17:54:32
【问题描述】:
我有以下名为 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
因为简的所有宠物都是同一类型。
好像简氏的猫被算作个体,但它们应该只算作一只,因为两只猫属于同一类型。
关于如何解决此问题的任何提示?
【问题讨论】:
-
你能自己运行内部查询并发布结果吗?您确定所有字段都是相同的吗?因为它们是字符串,您可能会在其中包含空格或大写字母,这会造成混淆。
-
我想通了。我忘记了我在 pet_types 表中添加了一行,将金鱼映射到海洋生物,所以 jim 的金鱼被计算了两次。因此波士顿返回 5 而不是 4。
-
很好发现,很高兴它已修复!请关闭问题。