获取上周每天的记录计数如果在特定日期未找到记录,则我希望0作为记录

aiazj4mn  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(289)

我的销售表

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
tquggr8v

tquggr8v1#

首先,您可以创建一个主表来表示所有缩写的工作日名称。
现在,我们可以使用 Date_format() 函数 %a 说明符以获取特定工作日的缩写名称 created_at 日期。我们可以把它当作我们的 Left Join 条件。 Left Join 允许我们考虑所有工作日,即使没有匹配 created_at 为了某一天。 Count(*) 在这里不起作用,因为它计算组中的所有行。但是,我们不想对没有匹配行的行进行计数。所以,我们用 Count(created_at) ,因为它将忽略 null 价值观。
最后,通过删除 Date() 函数在 Where 条款。
您将需要在一周内使用主表。
查询:

SELECT week_table.day_order, 
       week_table.wkday AS `day`, 
       Count(created_at) AS `count` 
FROM   
(
 SELECT 'Mon' AS wkday, 1 AS day_order UNION ALL
 SELECT 'Tue', 2 UNION ALL
 SELECT 'Wed', 3 UNION ALL
 SELECT 'Thu', 4 UNION ALL
 SELECT 'Fri', 5 UNION ALL
 SELECT 'Sat', 6 UNION ALL
 SELECT 'Sun', 7
) AS week_table 
LEFT JOIN sale AS s 
  ON DATE_FORMAT(created_at, '%a') = week_table.wkday AND 
     created_at >= ( CURDATE() - INTERVAL 7 day ) AND 
     created_at <  ( CURDATE() + INTERVAL 1 day )
GROUP BY week_table.day_order, week_table.wkday 
ORDER BY week_table.day_order;

结果

| day_order | day | count |
| --------- | --- | ----- |
| 1         | Mon | 0     |
| 2         | Tue | 1     |
| 3         | Wed | 0     |
| 4         | Thu | 1     |
| 5         | Fri | 5     |
| 6         | Sat | 0     |
| 7         | Sun | 1     |

db fiddle视图

相关问题