mysql - 如果特定记录不可用,那么我需要在 MYSQL 查询中显示为零

标签 mysql database

SELECT DATE(login) AS loginDate, COALESCE(COUNT(login),0) AS loginCount    
  FROM LMS_LoginTracking 
 WHERE prism_mem_id = 55308
   AND DATE(login) BETWEEN '2017-01-04T18:30:00.000Z' AND '2017-01-09T18:30:00.000Z'
 GROUP BY DATE(login)

输出是:

LoginDate     LoginCount
2017-01-05     406
2017-01-06     558
2017-01-08      11
2017-01-09     406

在这里,我期望 2017-01-07 应该是 0,因为该日期在数据中不可用,即使我需要该特定日期的结果作为零结果。

要求的输出:

LoginDate     LoginCount
2017-01-05     406
2017-01-06     558
2017-01-07       0
2017-01-08      11
2017-01-09     406

请帮我解决这个问题。

最佳答案

有很多不同的方法可以实现这一点。我知道最简单的方法是创建一个表来存储感兴趣的日期。然后用相关数据填充它。我们称之为工作日

CREATE TABLE work_days(
    work_day date NOT NULL PRIMARY KEY
);

然后您可以按如下方式在其上使用左连接

SELECT date(login) as loginDate, COALESCE(count(login),0) as loginCount 
FROM work_dates LEFT JOIN LMS_LoginTracking
ON work_dates.work_day = date(LMS_LoginTracking.login) /* edit as appropriate */
WHERE prism_mem_id=55308 AND DATE(login) BETWEEN '2017-01-04T18:30:00.000Z' AND '2017-01-09T18:30:00.000Z' group by date(login)

您尚未发布表格,因此无法在此处进行测试。因此,此查询可能无法以其确切的形式工作。请酌情编辑

关于mysql - 如果特定记录不可用,那么我需要在 MYSQL 查询中显示为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41712356/

相关文章:

php - sql更新不执行

c# - 启动第二个表单后关闭数据库连接

mysql - 分组结果集 - mysql

mysql - 为什么这个递归连接产生 : Data too long

php - mysql 特定的 select with order

redis - friend 的 friend 用例 - Redis 与图形数据库

php - 如何确认房间是否已满?

java - 在重试网络连接之间暂停

database - 数据库系统中用户定义的完整性规则的示例?

javascript - PhoneGap javascript localStorage Android