将 MySQL 的 COUNT 与两个表一起使用
Posted
技术标签:
【中文标题】将 MySQL 的 COUNT 与两个表一起使用【英文标题】:Using MySQL's COUNT with two tables 【发布时间】:2017-12-10 18:48:25 【问题描述】:我有以下名为 tbl_pet_owners 的 mysql 表:
+--------+----------+--------+
| name | pet | city |
+========+==========+========+
| jane | cat | Boston |
+--------+----------+--------+
| jane | dog | Boston |
+--------+----------+--------+
| jack | cat | Boston |
+--------+----------+--------+
| jim | snake | Boston |
+--------+----------+--------+
| jim | goldfish | Boston |
+--------+----------+--------+
| joseph | cat | NYC |
+--------+----------+--------+
我想使用 COUNT 来获取每个城市的宠物数量,但是如果一个人拥有两个或多个相同类型的宠物,那么这些宠物被计为一个。宠物类型列在另一个名为 tbl_pet_types 的 MySQL 表中:
+----------+---------+
| pet | type |
+==========+=========+
| cat | mammal |
+----------+---------+
| dog | mammal |
+----------+---------+
| snake | reptile |
+----------+---------+
| goldfish | fish |
+----------+---------+
因此,由于简的猫和狗属于同一类型,因此它们被视为一只宠物。 在此示例中,结果将是:
Boston 4
NYC 1
关于如何实现这一点的任何提示?
【问题讨论】:
所以你是按城市、所有者和宠物类型分组的? 是的。没错。 到目前为止你尝试过什么?查看Join
tbl_pet_types
表。
从 tbl_pet_owners GROUP BY 城市中选择城市,计数(DISTINCT 名称,宠物)
你尝试这样做会得到什么?
【参考方案1】:
看看这是否有效。
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
【讨论】:
【参考方案2】:它可以优化,但有效:
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】: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
【讨论】:
以上是关于将 MySQL 的 COUNT 与两个表一起使用的主要内容,如果未能解决你的问题,请参考以下文章