我不明白为什么我的查询没有返回我想要的东西。有人能帮我一下吗?
table:
查询(cte):
WITH cancel AS(
SELECT t.Request_at AS day, IFNULL(COUNT(t.Status),0) AS cancelled
FROM Trips t
LEFT JOIN Users u
ON t.Client_Id = u.Users_Id
WHERE (t.Status = "cancelled_by_driver" or t.Status = "cancelled_by_client")
AND t.Request_at BETWEEN "2013-10-01" AND "2013-10-03"
AND u.Banned = "No"
GROUP BY t.Request_at)
所以我想让上面的cte返回2013年10月1日至2013年10月3日期间未绑定用户或司机取消的行程数。我的查询返回的是被取消日期的正确数字,但没有返回没有取消日期的“0”。我不明白为什么结果是这样的,因为我已经在使用ifnull和left join了。
1条答案
按热度按时间uxh89sit1#
这个
where
子句在您有机会将没有取消驱动器的日期包括在结果集中之前逐出这些日期。如果表中有所有可用的日期(无论状态如何),只需在聚合中移动条件即可:
一种更通用的方法是使用日历表来处理日期,然后使用
left join
. 如果没有这样的表,可以通过递归查询(mysql 8.0中提供)动态生成: