MySql选择和计算每天的数据数-包括空日期


MySql Select and count number of data per day - include empty dates

如何选择&按天对数据库中的数据进行分组,但也包括没有条目的天数。在这种情况下,值将为0。

如果MySQL不行,也可以用PHP。

以下是我目前的记录:

SELECT DATE_FORMAT(date, '%Y-%m-%d') AS the_date
     , COUNT(*) AS count 
  FROM table 
 WHERE date BETWEEN DATE_FORMAT('2016-11-28', '%Y-%m-%d') AND DATE_FORMAT('2016-12-05', '%Y-%m-%d') 
 GROUP 
    BY the_date

在PHP中添加缺少的日期可能更简单。在MySQL中,您需要从某处获取日期。通常,数据库有一个包含这些信息的"日历"表。如果你有一个,那么像这样的代码可以满足你的需要:

SELECT DATE_FORMAT(c.date, '%Y-%m-%d') AS the_date, COUNT(t.date) AS count 
FROM Calendar c LEFT JOIN
     table t
     ON c.date = t.date
WHERE c.date BETWEEN '2014-11-28' AND '2014-12-05' -- MySQL recognizes strings in the format of YYYY-MM-DD as dates when needed
GROUP BY the_date;

如果您没有这样的表,您可以为查询创建一个:

SELECT DATE_FORMAT(c.date, '%Y-%m-%d') AS the_date, COUNT(t.date) AS count 
FROM (SELECT date('2014-11-28') as date UNION ALL
      SELECT date('2014-11-29') as date UNION ALL
      SELECT date('2014-11-30') as date UNION ALL
      SELECT date('2014-12-01') as date UNION ALL
      SELECT date('2014-12-02') as date UNION ALL
      SELECT date('2014-12-03') as date UNION ALL
      SELECT date('2014-12-04') as date UNION ALL
      SELECT date('2014-12-05') as date 
     ) c LEFT JOIN
     table t
     ON c.date = t.date
GROUP BY the_date;

这适用于少数日期,但对于跨越几个月或几年的范围就不太适用了。