Heim >Datenbank >MySQL-Tutorial >Wie zeige ich monatliche Datensätze in MySQL an, auch wenn Daten fehlen?

Wie zeige ich monatliche Datensätze in MySQL an, auch wenn Daten fehlen?

Susan Sarandon
Susan SarandonOriginal
2024-11-06 22:01:02583Durchsuche

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

MySQL-Abfrage zum Anzeigen monatlicher Datensätze auch bei fehlenden Daten

Frage:

In a Wenn Sie monatliche Datensätze aus einer Benutzertabelle abrufen müssen, kann es sein, dass für bestimmte Monate Daten fehlen. Wie können Sie dieses Problem lösen und sicherstellen, dass alle Monate angezeigt werden, unabhängig davon, ob sie Daten enthalten oder nicht?

Antwort:

Um monatliche Benutzerdatensätze abzurufen, einschließlich Für diejenigen aus Monaten ohne Einträge kann eine Lösung mithilfe einer Kombination aus einer abgeleiteten Tabelle und einem Left Join implementiert werden.

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;

Erklärung:

  • Die abgeleitete Tabelle „m“ generiert eine virtuelle Tabelle mit einer Spalte namens „merge_date“, die alle Monate innerhalb eines bestimmten Jahres darstellt.
  • Die LEFT JOIN-Operation verknüpft die Tabelle „users“ mit der abgeleiteten Tabelle „m“. „
  • Die „group by“-Klausel aggregiert das Ergebnis nach dem merge_date, um die Anzahl der Benutzer für jeden Monat zu zählen.
  • Die „order by“-Klausel wird verwendet, um die Ergebnisse nach Monat in aufsteigender Reihenfolge zu sortieren.

Durch die Verwendung des Left Join ruft die Abfrage Daten sowohl aus der Tabelle „Benutzer“ als auch aus der abgeleiteten Tabelle ab und stellt so sicher, dass die Ergebnisse alle Monate umfassen, auch diejenigen ohne entsprechende Benutzerdatensätze. Diese Methode bewältigt effektiv Situationen, in denen Daten für bestimmte Monate fehlen.

Das obige ist der detaillierte Inhalt vonWie zeige ich monatliche Datensätze in MySQL an, auch wenn Daten fehlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn