1

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クエリについて知りました。だから私はそれを修正しようとしましたが、解決策が得られませんでした。

4

1 に答える 1

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
于 2013-05-30T14:02:52.903 に答える