首页 > 解决方案 > MYSQL 在不存在的日期中返回零,并且 COUNT 在特定日期存在多少行

问题描述

我有一个名为 calendar 的表,其中包含一列 (mydate DATE)。

MYDATE
2020-01-01
2020-01-02
2020-01-03

...

我还有一个名为 delivery 的表,包含三列(id PK、giorno DATE、totale FLOAT)

ID    GIORNO          TOTALE
1     2020-01-01      0.10
2     2020-01-01      5
3     2020-01-02      12
4     2020-01-12      5
5     2020-02-02      13.50

这就是我想要获得的:

Day            Numbers of orders
2020-01-01     2
2020-01-02     1
2020-01-03     0
2020-01-04     0
2020-01-05     0
2020-01-06     0
2020-01-07     0
2020-01-08     0
2020-01-09     0
2020-01-10     0
2020-01-11     0
2020-01-12     1

...

我正在尝试这个查询:

SELECT c.mydate, IFNULL(d.totale, 0) value 
FROM delivery d
RIGHT JOIN calendar c
    ON ( c.mydate = d.giorno )
GROUP BY c.mydate 
ORDER BY c.mydate 

标签: mysqlsqldategroup-bycount

解决方案


考虑:

select c.mydate, count(d.id) number_of_orders
from calendar c
left join delivery d on d.giorno = c.mydate
group by c.mydate

这是通过将日历表与订单表左连接,然后按日期聚合,最后计算订单表中匹配行的数量来实现的。

这与您的原始查询非常接近(尽管它使用left join而不是right join),但是这使用聚合函数来计算订单。


推荐阅读