【问题标题】:Mysql Get count by month and groupedMysql按月获取计数并分组
【发布时间】:2021-11-08 23:50:50
【问题描述】:

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

    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

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

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    你似乎想要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);
    

    Here 是一个 dbfiddle。

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

    【讨论】:

    • 我刚刚尝试了 sum,它确实返回了正确的数量,但现在日期没有分组。所以我得到了 2018 年的两个结果,而不是一个。有没有办法每年和每月只有一个结果?
    • @user3052443 。 . .这将返回一行。年和月。这就是group by 的工作原理。
    • 这是否意味着无法以所需格式返回数据?我可以用 php 来做,但 mysql 通常更快。
    猜你喜欢
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多