sql >> Base de Datos >  >> RDS >> Mysql

Obtenga registro por mes pero también obtenga cero si no hay registros ese mes

SELECT  Months.m AS month, COUNT(Tests.receiveDate) AS total FROM 
(
    SELECT 1 as m 
    UNION SELECT 2 as m 
    UNION SELECT 3 as m 
    UNION SELECT 4 as m 
    UNION SELECT 5 as m 
    UNION SELECT 6 as m 
    UNION SELECT 7 as m 
    UNION SELECT 8 as m 
    UNION SELECT 9 as m 
    UNION SELECT 10 as m 
    UNION SELECT 11 as m 
    UNION SELECT 12 as m
) as Months
LEFT JOIN Tests  on Months.m = MONTH(Tests.receiveDate)  
GROUP BY
    Months.m

Si quieres un año específico, prueba esto.

SELECT  Months.m AS month, COUNT(Tests.receiveDate) AS total FROM 
(
    SELECT 1 as m 
    UNION SELECT 2 as m 
    UNION SELECT 3 as m 
    UNION SELECT 4 as m 
    UNION SELECT 5 as m 
    UNION SELECT 6 as m 
    UNION SELECT 7 as m 
    UNION SELECT 8 as m 
    UNION SELECT 9 as m 
    UNION SELECT 10 as m 
    UNION SELECT 11 as m 
    UNION SELECT 12 as m
) as Months
LEFT JOIN Tests on Months.m = MONTH(Tests.receiveDate)  
AND YEAR(Tests.receiveDate) = '2012'
GROUP BY Months.m