如何外部加入日历 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;
我有一个包含客户订单记录的 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;