我想emp_info每天从表中检索过去1周的数据。
emp_info
所以我用过:
SELECT DAYNAME(timestamp), COUNT(*) FROM `emp_info` WHERE DATE(timestamp ) > DATE_SUB(CURDATE( ) , INTERVAL 1 WEEK ) GROUP BY DAYNAME(timestamp);
根据查询,我得到的结果是:
Monday 5 Thursday 7
但是我也希望工作日的 结果 为 0 ,但未输入任何记录。
从建议中,我了解到有关 JOIN 查询的信息。因此,我已尝试修复它,但未获得任何解决方案。
您得到的结果是正确的,因为在特定的日期名上没有记录。由于要获取所有的日名,因此需要投影完整的日期集( 在SUBQUERY中使用UNION )并将其与现有查询一起加入。
SELECT a.day_name, COALESCE(b.totalCount, 0) totalCount FROM ( SELECT 'Sunday' day_name, 1 ordby UNION ALL SELECT 'Monday' day_name, 2 ordby UNION ALL SELECT 'Tuesday' day_name, 3 ordby UNION ALL SELECT 'Wednesday' day_name, 4 ordby UNION ALL SELECT 'Thursday' day_name, 5 ordby UNION ALL SELECT 'Friday' day_name, 6 ordby UNION ALL SELECT 'Saturday' day_name, 7 ordby ) a LEFT JOIN ( SELECT DAYNAME(timestamp) day_name, COUNT(*) totalCount FROM `emp_info` WHERE DATE(timestamp ) > DATE_SUB(CURDATE( ) , INTERVAL 1 WEEK ) GROUP BY DAYNAME(timestamp) ) b ON a.day_name = b.day_name ORDER BY a.ordby