GROUP BY和COUNT如何包含零和?

JBu*_*ace 10 sql sqlite

我有像这样的SQL($ytoday5天前):

$sql = 'SELECT Count(*), created_at FROM People WHERE created_at >= "'. $ytoday .'" AND GROUP BY DATE(created_at)';
Run Code Online (Sandbox Code Playgroud)

我想让它每天返回一个值,所以在这种情况下会返回5个结果(5天前直到今天).

但是说Count(*)昨天为0,而不是返回零,它在该日期根本不返回任何数据.

如何更改该SQLite查询,以便它还返回计数为0的数据?

Mat*_*lie 9

如果没有复杂的(在我看来)查询,您的输出数据集将不包括输入数据集中不存在的日期.这意味着您需要一个5天的数据集才能加入.

简单的版本是创建一个包含5个日期的表,并加入其中.我通常创建并保留(有效地缓存)日历表,其中包含我可能需要的每个日期. (例如从1900-01-01到2099-12-31.)

SELECT
  calendar.calendar_date,
  Count(People.created_at)
FROM
  Calendar
LEFT JOIN
  People
    ON Calendar.calendar_date = People.created_at
WHERE
  Calendar.calendar_date >= '2012-05-01'
GROUP BY
  Calendar.calendar_date
Run Code Online (Sandbox Code Playgroud)


Red*_*ter 5

您需要针对日期列表进行左连接。您可以创建一个包含所需日期的表格,也可以采用我在此处概述的动态方法:

从日期范围生成天数