我的销售表
ID amount created_at
48 10 2018-10-15 10:57:24
49 20 2018-10-16 10:58:14
50 25 2018-10-22 14:07:31
51 24 2018-10-24 12:13:15
52 36 2018-10-24 12:13:21
53 40 2018-10-30 09:46:37
54 40 2018-10-28 09:46:37
55 40 2018-11-1 09:46:37
56 40 2018-11-2 09:46:37
57 40 2018-11-2 09:46:37
58 40 2018-11-2 09:46:37
59 40 2018-11-2 09:46:37
60 40 2018-11-2 09:46:37
我的qyery
SELECT Date(created_at),
Count(*)
FROM sale
WHERE Date(created_at) BETWEEN ( Now() - INTERVAL 7 day ) AND Now()
GROUP BY Date(created_at)
我的结果
date(created_at) count
2018-10-28 12:13:15 1
2018-10-1 09:46:37 1
2018-10-2 09:46:37 5
假设从2018-10-28开始的一周,我需要如下结果,如果没有特定日期的记录,那么它将为0。
day count
mon 1
tue 0
wed 0
thu 1
fri 5
sat 0
sun 0
1条答案
按热度按时间tquggr8v1#
首先,您可以创建一个主表来表示所有缩写的工作日名称。
现在,我们可以使用
Date_format()
函数%a
说明符以获取特定工作日的缩写名称created_at
日期。我们可以把它当作我们的Left Join
条件。Left Join
允许我们考虑所有工作日,即使没有匹配created_at
为了某一天。Count(*)
在这里不起作用,因为它计算组中的所有行。但是,我们不想对没有匹配行的行进行计数。所以,我们用Count(created_at)
,因为它将忽略null
价值观。最后,通过删除
Date()
函数在Where
条款。您将需要在一周内使用主表。
查询:
结果
db fiddle视图