Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann ich in MySQL monatliche Datensätze abrufen, auch wenn für bestimmte Monate keine Daten vorhanden sind?

Susan Sarandon
Freigeben: 2024-11-07 15:39:02
Original
809 Leute haben es durchsucht

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

So wählen Sie monatsbezogene Datensätze in MySQL aus, auch wenn keine Daten vorhanden sind

So rufen Sie monatsbezogene Datensätze aus einer Benutzertabelle ab können Sie eine Abfrage wie die folgende verwenden:

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'))
Nach dem Login kopieren

Diese Abfrage liefert Ihnen die Gesamtzahl der Benutzer sowie den Monat und das Jahr ihrer Registrierung. Es werden jedoch nur Monate mit vorhandenen Daten angezeigt.

Um Monate ohne Daten einzubeziehen, können Sie einen der folgenden Ansätze verwenden:

Methode 1 : Vereinigung der Monate

Diese Methode beinhaltet die Erstellung einer Vereinigung aller möglichen Monate im gewünschten Jahr:

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;
Nach dem Login kopieren

Methode 2: Vereinigung der Daten

Diese Methode erstellt eine Vereinigung von Daten für alle Monate im gewünschten Jahr:

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;
Nach dem Login kopieren

Beide Vereinigungsmethoden erstellen Platzhalter für alle Monate, sodass Sie Datensätze auch dann anzeigen können, wenn keine Daten vorhanden sind . Die Wahl zwischen den beiden Methoden hängt von Ihren spezifischen Anforderungen ab.

Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL monatliche Datensätze abrufen, auch wenn für bestimmte Monate keine Daten vorhanden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage