问题描述
正常方法是left join
:
select wd.wd, count(t.id)
from (select 1 as wd union all select 2 union all select 3 union all select 4 uion all
select 5 union all select 6 union all select 7
) wd left join
test t
on wd.wd = weekday(t.date)
group by wd.wd
order by wd.wd;
解决方法
我有一个MySQL查询问题,该查询按工作日将表中的数据分组。
我需要它来填充数据中缺少的工作日,例如下面的SQL示例中的星期日(工作日7)。
MySQL 5.6模式设置 :
create table test (
`id` INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,`date` DATETIME
);
INSERT INTO test (`date`) VALUES
('2016-05-16 00:00:00'),('2016-05-17 00:00:00'),('2016-05-18 00:00:00'),('2016-05-20 00:00:00'),('2016-05-21 00:00:00'),('2016-05-22 00:00:00'),('2016-05-16 00:00:00'),('2016-05-20 00:00:00');
查询1 :
SELECT WEEKDAY(date) AS weekday,COUNT(id) AS posts
FROM test
GROUP BY WEEKDAY(date)
结果 :
| weekday | posts |
|---------|-------|
| 0 | 2 |
| 1 | 2 |
| 2 | 2 |
| 4 | 2 |
| 5 | 1 |
| 6 | 1 |
我希望它也返回此行。
| 3 | 0 |
我的完整查询非常复杂,因此希望您能找到一个快速的解决方案。