2010-08-15 33 views
5

Estoy tratando de contar los registros en mi tabla y agruparlos por fecha. Mi consulta actual se ve algo como lo siguiente:Mysql: Contar registros (incluyendo cero) por mes

SELECT 
    count(*), 
    MONTH(time) as month, 
    YEAR(time) as year 
FROM 
    myTable 
GROUP BY 
    month, year 
ORDER BY 
    year, month 

Esto funciona, excepto que también me gustaría obtener un recuento de meses donde no existe registros.

¿Alguien podría ofrecer consejos/sugerencias sobre cómo lograr esto?

Respuesta

2

La manera más simple de hacer esto en MySQL es crear una tabla llamada months que enumere todos los meses que le interesan y use una UNIÓN IZQUIERDA a su tabla.

SELECT 
    YEAR(time) AS year 
    MONTH(time) AS month, 
    COUNT(myTable.year) AS cnt, 
FROM months 
LEFT JOIN myTable 
    ON months.year = myTable.year 
    AND months.month = myTable.month 
GROUP BY months.year, months.month 
ORDER BY months.year, months.month 

Sin embargo puesto que esto es sobre todo una cuestión de presentación es a menudo más fácil basta con ejecutar la consulta como ya lo están haciendo y transformar el resultado en el cliente (por ejemplo, PHP).

Cuestiones relacionadas