连表查询是指通过连接两个或多个表中的数据,来实现更为复杂的查询。在统计0数据时,常常需要连接的是一张包含所有可能结果的虚拟表,再使用LEFT JOIN语句连接实际数据表,统计出不存在于实际数据表中的记录,即为0数据。
SELECT a.date, IFNULL(b.count, 0) FROM
(
SELECT DATE('2021-01-01') + INTERVAL a DAY AS date FROM
(SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) AS a,
(SELECT 0 AS b UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) AS b
WHERE DATE('2021-01-01') + INTERVAL a DAY= '2021-01-01' AND created_at<= '2021-01-07'
GROUP BY DATE(created_at)
) b
ON a.date = b.date;
在上述代码中,大家创建了一个虚拟表a,生成了一段时间内的所有日期。通过LEFT JOIN与实际数据表orders连接,并在SELECT语句中使用IFNULL函数判断是否存在对应记录,不存在则返回0。最终的查询结果包含所有日期,不存在于orders表中的日期对应的count值为0。