如何外部加入日历 table 以查看具有 0 条记录的日期

How to Outer Join a Calendar table to view dates with 0 records

我有一个包含客户订单记录的 table 和一个日期从 2022 年 1 月到 10 年的 table。我想获得过去 28 天内每天产生的所有客户数量,包括那些记录了 0 个客户的客户。所以我需要将日历 table 外联到客户记录中。但是,我无法正确使用外连接。

我是这样做的:

SELECT order_date as 'date', COUNT(orderstatus) as 'customers'
FROM orders
RIGHT OUTER JOIN calendar ON
calendar.date = orders.order_date
WHERE sellerid = 11

我得到:

date          customers
2022-01-02    9

我想看:

date          customers
2022-01-01    0
2022-01-02    9
2022-01-03    0
.
.
.

除非按日期分组,否则您不会得到您在问题中发布的结果,所以我猜您错过了那部分代码。

您需要一个 WHERE 子句来过滤过去 28 天的日历行,并且您必须将条件 sellerid = 11 移动到 ON 子句:

SELECT c.order_date, 
       COUNT(o.order_date) customers
FROM calendar c LEFT JOIN orders o
ON o.sellerid = 11 AND o.order_date = c.date 
WHERE c.date BETWEEN CURRENT_DATE - INTERVAL 28 DAY AND CURRENT_DATE
GROUP BY c.order_date;