Maison >base de données >tutoriel mysql >Comment récupérer des enregistrements mensuels dans MySQL même s'il n'existe aucune donnée pour des mois spécifiques ?

Comment récupérer des enregistrements mensuels dans MySQL même s'il n'existe aucune donnée pour des mois spécifiques ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-07 15:39:02862parcourir

How to retrieve month-wise records in MySQL even if no data exists for specific months?

Comment sélectionner des enregistrements mensuels dans MySQL même si les données n'existent pas

Pour récupérer des enregistrements mensuels à partir d'une table utilisateur , vous pouvez utiliser une requête comme celle-ci :

SELECT COUNT(`userID`) AS total, DATE_FORMAT(`userRegistredDate`, '%b') AS MONTH, YEAR(`userRegistredDate`) AS year
FROM `users`
GROUP BY DATE_FORMAT(FROM_UNIXTIME(`userRegistredDate`, '%b'))

Cette requête vous fournira le nombre total d'utilisateurs ainsi que le mois et l'année de leur inscription. Cependant, il n'affichera que les mois avec des données existantes.

Pour inclure des mois sans données, vous pouvez utiliser l'une des approches suivantes :

Méthode 1 : Union des Mois

Cette méthode consiste à créer une union de tous les mois possibles dans l'année souhaitée :

SELECT COUNT(u.userID) AS total, m.month
FROM (
SELECT 'Jan' AS MONTH
UNION SELECT 'Feb' AS MONTH
UNION SELECT 'Mar' AS MONTH
UNION SELECT 'Apr' AS MONTH
UNION SELECT 'May' AS MONTH
UNION SELECT 'Jun' AS MONTH
UNION SELECT 'Jul' AS MONTH
UNION SELECT 'Aug' AS MONTH
UNION SELECT 'Sep' AS MONTH
UNION SELECT 'Oct' AS MONTH
UNION SELECT 'Nov' AS MONTH
UNION SELECT 'Dec' AS MONTH
) AS m
LEFT JOIN users u
ON MONTH(STR_TO_DATE(CONCAT(m.month, ' 2013'),'%M %Y')) = MONTH(u.userRegistredDate)
AND YEAR(u.userRegistredDate) = '2013'
GROUP BY m.month
ORDER BY 1+1;

Méthode 2 : Union des Dates

Cette méthode crée une union de dates pour tous les mois de l'année souhaitée :

SELECT COUNT(u.userID) AS total, DATE_FORMAT(merge_date,'%b') AS month, YEAR(m.merge_date) AS year
FROM (
SELECT '2013-01-01' AS merge_date
UNION SELECT '2013-02-01' AS merge_date
UNION SELECT '2013-03-01' AS merge_date
UNION SELECT '2013-04-01' AS merge_date
UNION SELECT '2013-05-01' AS merge_date
UNION SELECT '2013-06-01' AS merge_date
UNION SELECT '2013-07-01' AS merge_date
UNION SELECT '2013-08-01' AS merge_date
UNION SELECT '2013-09-01' AS merge_date
UNION SELECT '2013-10-01' AS merge_date
UNION SELECT '2013-11-01' AS merge_date
UNION SELECT '2013-12-01' AS merge_date
) AS m
LEFT JOIN users u
ON MONTH(m.merge_date) = MONTH(u.userRegistredDate)
AND YEAR(m.merge_date) = YEAR(u.userRegistredDate)
GROUP BY m.merge_date
ORDER BY 1+1;

Les deux méthodes d'union créent des espaces réservés pour tous les mois, vous permettant d'afficher des enregistrements même si les données n'existent pas . Le choix entre les deux méthodes dépend de vos besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn