Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rufen Sie Datensätze mit der JOIN-Abfrage ab

Das Ergebnis, das Sie erhalten, ist richtig, da es keine Aufzeichnungen zu einem bestimmten Tagesnamen gibt. Da Sie alle Tagesnamen erhalten möchten, müssen Sie den kompletten Tagessatz projizieren (unter Verwendung von UNION innerhalb einer SUBQUERY ) und verbinden Sie es mit Ihrer bestehenden Abfrage.

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