首页 > 解决方案 > Mysql按月获取计数并分组

问题描述

我正在尝试检索按数量划分为数月的结果。我几乎可以使用它,但我需要实际数量,它返回表中的条目数,而不是值。我的表格和数据如下所示:

    table products {
     int oid
     datetime date
    } 
    table orders {
     int oid
     int qty
    }

    products
    1, 2018-01-01
    2, 2018-01-01
    3, 2020-01-
    4, 2020-02-01
    }
    orders 
    1, 1,
    2, 4
    3, 2
    4, 3
    } 

我运行的命令是

    select YEAR(p.date), MONTH(p.date), COUNT(o.qty)
    FROM products p left join orders o using (oid)
    GROUP BY YEAR(p.date), MONTH(p.date)

我得到的结果是

    2018 1 2
    2020 1 1
    2020 2 1

他们应该在哪里

    2018 1 5
    2020 1 1
    2020 2 1

有人可以解释一下如何按月获得正确的数量吗?

标签: mysqlgroup-by

解决方案


你似乎想要sum()

SELECT YEAR(p.date), MONTH(p.date), SUM(o.qty)
FROM products p LEFT JOIN
     orders o 
     USING (oid)
GROUP BY YEAR(p.date), MONTH(p.date);

编辑:

看起来您想将缺失qty值处理为1. 只需使用coalesce()

SELECT YEAR(p.date), MONTH(p.date), SUM(COALESCE(o.qty))
FROM products p LEFT JOIN
     orders o 
     USING (oid);

是一个 db<>fiddle。

GROUP BY YEAR(p.date), MONTH(p.date)

推荐阅读