sql >> Databáze >  >> RDS >> Mysql

Získejte záznamy pomocí dotazu JOIN

Výsledek, který dostáváte, je správný, protože neexistují žádné záznamy pro konkrétní den. Protože chcete získat všechny názvy dnů, musíte promítnout kompletní sadu dnů (pomocí UNION uvnitř SUBQUERY ) a připojte jej ke svému stávajícímu dotazu.

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



  1. fe_sendauth:nebylo zadáno žádné heslo

  2. Vyberte datový typ pole v postgresu

  3. Výsledky SSMS do mřížky - CRLF není zachováno při kopírování/vkládání - nějaké lepší techniky?

  4. Jak optimalizovat tento dotaz MySQL? Miliony řádků