Maison >base de données >tutoriel mysql >Comment afficher les enregistrements mensuels dans MySQL même avec des données manquantes ?

Comment afficher les enregistrements mensuels dans MySQL même avec des données manquantes ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 22:01:02589parcourir

How to Show Monthly Records in MySQL Even with Missing Data?

Requête MySQL pour afficher les enregistrements mensuels même avec des données manquantes

Question :

Dans un Dans une situation où vous devez récupérer des enregistrements mensuels à partir d'une table utilisateur, vous pouvez rencontrer des données manquantes pour certains mois. Comment pouvez-vous surmonter ce problème et assurer l'affichage de tous les mois, qu'ils contiennent ou non des données ?

Réponse :

Pour récupérer les enregistrements utilisateur mensuels, y compris ceux des mois sans entrées, une solution peut être implémentée en utilisant une combinaison d'une table dérivée et d'une jointure gauche.

SELECT COUNT(u.userID) AS total, m.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;

Explication :

  • La table dérivée "m" génère une table virtuelle avec une colonne nommée "merge_date" qui représente tous les mois d'une année spécifique.
  • L'opération LEFT JOIN relie la table "users" à la table dérivée "m. "
  • La clause group by agrège le résultat par date de fusion pour compter le nombre d'utilisateurs pour chaque mois.
  • La clause order by est utilisée pour trier les résultats par mois dans l'ordre croissant.

En utilisant la jointure gauche, la requête récupère les données de la table "utilisateurs" et de la table dérivée, garantissant que les résultats incluent tous les mois, même ceux sans aucun enregistrement utilisateur correspondant. Cette méthode gère efficacement les situations où les données de certains mois sont manquantes.

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