使用JOIN查询检索记录

时间:2013-05-30 13:59:14

标签: mysql sql

我想每天从emp_info表中检索过去1周的数据。

所以我用过:

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 查询了解的建议。所以我试图解决它,但没有得到任何解决方案。

1 个答案:

答案 0 :(得分:4)

您获得的结果是正确的,因为特定日期名称上没有记录。由于您希望获得所有的日期名称,因此您需要预测整套日期(在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