【问题标题】:Using MySQL's COUNT with two tables将 MySQL 的 COUNT 与两个表一起使用
【发布时间】: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 名称,宠物)
  • 你尝试这样做会得到什么?

标签: mysql sql


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 2020-06-23
        • 2016-09-21
        相关资源
        最近更新 更多