MySQL 左连接结构不返回订单数为 0 的月份

标签 mysql

我有两个表:

  • 闪耀订单
  • LU_CALENDAR

上下文:

  • LU_CALENDAR 本质上是一个包含某个范围内所有可能日期的表。它有一个名为 Calendar_date 的天列,其中包含所有日期戳,例如 2000-01-01。
  • shine_orders 包含我的订单,其中 dt 列带有日期时间戳,例如“2011-06-15 10:54:09”。

我试图返回一个范围内所有月份的值,即使对于 Shine_orders 中的特定 app_id 来说,某些月份没有行。后者是我正在努力解决的问题。我无法让它返回结果为 0 的数据。

到目前为止的 SQL 语句:

SELECT DATE_FORMAT(dt, '%b %y') as dtstr, COUNT(*) 
FROM shine_orders 
LEFT JOIN LU_CALENDAR
ON Date(shine_orders.dt) = LU_CALENDAR.Calendar_Date
WHERE shine_orders.type = 'PayPal' 
    AND shine_orders.app_id = '5' 
    AND DATE_ADD(LU_CALENDAR.Calendar_Date, INTERVAL 2 YEAR) > NOW()

GROUP BY dtstr 
ORDER BY DATE_FORMAT(dt, '%y%m') ASC

示例输出:

enter image description here

这里有人知道我做错了什么吗?

最佳答案

首先,您的示例输出中似乎包含所有月份。但我了解您的问题是,由于示例输出为零,因此跳过了一些月份。

我认为在这种情况下,右连接比左连接更合适,这应该意味着日历日期字段中的每一行都会显示。另外,由于您正确连接到表 LU_CALENDAR,因此您需要确保按 LU_CALENDAR 中的某些内容进行分组;所以对于你的第一行尝试:

SELECT DATE_FORMAT(Calendar_Date, '%b %y') as dtstr, COUNT(*)

关于MySQL 左连接结构不返回订单数为 0 的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631022/

相关文章:

mysql - 从 mysql 列中删除所有数字字符

mysql - 数据库模式关系和例程关系的工具

javascript - 根据另一个下拉列表中的选择从数据库中拉取下拉选项

mysql - MySQL SELECT 查询中的输出别名

mysql - 如何使用新的 VPS 在非 root 帐户下安装 apache

MySQL 比较两个表并使用转置选择结果更新第二个表

MySQL 引号

php - SQL : Can’t grab values in descending order when using group by

php - 使用 PHP 和 HTML 上传文件

PHP-MySql : Like Query with modified Table Column