Mysql 显示之间的所有日期,即使分组依据中没有结果

Mysql 显示之间的所有日期,即使分组依据中没有结果,mysql,sql,Mysql,Sql,展示这个 预期结果 您可以创建一个日期列表,用于在表中列出和加入日期。下面查询的表c是日期表 SELECT Count(Phq_2) as Phq_2, Date(created) as created FROM `survey` WHERE Phq_2 != '' GROUP BY Date(created) ORDER BY Date(created) ASC 结果 SELECT c.date, COUNT(s.phq_2) FROM (select addd

展示这个

预期结果


您可以创建一个日期列表,用于在表中列出和加入日期。下面查询的表c是日期表

SELECT Count(Phq_2) as Phq_2, Date(created) as created
FROM `survey` 
WHERE Phq_2 != '' 
GROUP BY Date(created) 
ORDER BY Date(created) ASC
结果

SELECT c.date, 
       COUNT(s.phq_2) 
  FROM (select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) date from
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4
       ) c
  LEFT JOIN `survey` s 
    ON c.date = s.created
 WHERE s.phq_2 != '' 
   AND c.date BETWEEN '2017-08-30' AND '2017-09-06'
 GROUP BY c.date
 ORDER BY c.date

如果希望将c.date的日期固定在“2017-08-30”和“2017-09-06”之间,则可以在子查询中使用从表中创建的列的结果MIN()和MAX()。您可以创建一个日期列表,用于在表中列出和加入。下面查询的表c是日期表

SELECT Count(Phq_2) as Phq_2, Date(created) as created
FROM `survey` 
WHERE Phq_2 != '' 
GROUP BY Date(created) 
ORDER BY Date(created) ASC
结果

SELECT c.date, 
       COUNT(s.phq_2) 
  FROM (select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) date from
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
        (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4
       ) c
  LEFT JOIN `survey` s 
    ON c.date = s.created
 WHERE s.phq_2 != '' 
   AND c.date BETWEEN '2017-08-30' AND '2017-09-06'
 GROUP BY c.date
 ORDER BY c.date

如果您希望将c.date的日期固定在“2017-08-30”和“2017-09-06”之间,您可以在子查询中使用从表中创建的列的结果MIN()和MAX(),您需要创建一个临时表[WITH],该表生成您感兴趣的所有日期,并将左侧连接到查询中。我认为这是一个复杂的问题,我已经见过很多次了!请帮助我,我试图从现有问题中解决一些想法,但考虑到处理应用程序代码中的数据显示问题,您需要创建一个临时表[WITH],生成您感兴趣的所有日期以及查询的左连接。我认为这是一个复杂的问题,我已经见过很多次了!在Please help me中的一些想法我试图从现有问题中解决,但在vainConsider中处理应用程序CodeTool中的数据显示问题,所以只需使用此方法并将左连接添加到我们的表中,修复我的问题,谢谢。酷,所以只需使用此方法并将左连接添加到我们的表中,修复我的问题,谢谢。