【问题标题】:Filtering MySQL COUNT query results过滤 MySQL COUNT 查询结果
【发布时间】:2017-12-15 21:14:48
【问题描述】:

我有以下名为 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   |
|  8 | sam    | cat      | NYC    | 2017-07-11   |
|  9 | drew   | dog      | NYC    | 2016-07-11   |
+----+--------+----------+--------+--------------+

在之前的 Stack Overflow 帖子中,我请求帮助使用 COUNT 来获取每个城市的宠物数量,但是如果一个人拥有两只或更多相同类型的宠物,那么这些宠物将被计为一只。宠物类型列在另一个名为 tbl_pet_types 的 MySQL 表中:

+----------+-------------+
| pet      | type        |
+----------+-------------+
| cat      | mammal      |
| dog      | mammal      |
| goldfish | fish        |
| goldfish | seacreature |
| snake    | reptile     |
+----------+-------------+

这里是这个的工作代码:

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;

我正在尝试修改代码,以便只计算在“2017-01-01”和“2017-08-01”之间收养的宠物。所以在这个例子中,jack 的猫、joseph 的猫和draw 的狗都不会被计算在内。

我尝试在查询中添加 where 语句,但出现很多语法错误:

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 where result.date_adopted > '2017-01-01' 
and result.date_adopted < '2017-08-01'
group by result.city;

关于如何实现这一点的任何提示?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这样的:

    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 
        where owners.date_adopted BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
        group by owners.city, owners.name, types.type
    ) as result 
    group by result.city;
    

    【讨论】:

    • 为了提高查询性能,用连接替换子选择
    • ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 4 行 mysql>跨度>
    • 标记为有用的答案 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多