2017-07-23 2 views
0

Maintenant, ma question est simple, j'ai beaucoup de lignes dans MySQL par exempleObtenir nombre de lignes de chaque mois de cette année

name created_at 
A  2017-05-1 
B  2017-05-1 
C  2017-06-2 

Maintenant, j'ai couru cette requête

SELECT MONTH(created_at) , COUNT(created_at) 
FROM invoices 
WHERE created_at >= NOW() - INTERVAL 1 YEAR 
GROUP BY MONTH(created_at) 

Cela me donne correct résultat qui est

5 2 
6 1 

Mais je veux aussi les statistiques des mois précédents aussi comme

1 0 
2 0 
3 0 
4 0 
5 2 
6 1 

Comment puis-je modifier ma requête?

Répondre

1

Le plus simple est de créer une table des mois 1 à 12:

CREATE TABLE months (month INT PRIMARY KEY); 
INSERT INTO months (month) 
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12); 

Utilisez ensuite OUTER JOIN à se joindre à votre résultat:

SELECT m.month, COALESCE(i.count, 0) AS count 
FROM months AS m 
LEFT OUTER JOIN (
    SELECT MONTH(created_at) AS month, COUNT(created_at) AS count 
    FROM invoices 
    WHERE created_at >= NOW() - INTERVAL 1 YEAR 
    GROUP BY MONTH(created_at) 
) AS i ON m.month = i.month