Mysql
 sql >> Datenbank >  >> RDS >> Mysql

gibt Nullen für Daten zurück, die nicht existieren MYSQL GROUP BY

Typischerweise erreichen Sie diese Art von Dingen, indem Sie mit einer Wertetabelle VERKNÜPFEN , also eine Tabelle, die alle Werte enthält, die Sie interessieren.

Typische Wertetabellen können beispielsweise alle ganzzahligen Werte zwischen 0 und 1.000 oder alle Daten für einen bestimmten Zeitraum enthalten. Häufig enthalten die Wertetabellen mehr Werte als gewünscht, und wir erhalten genau die gewünschte Ausgabe, indem wir Filter in der WHERE-Klausel hinzufügen.

In diesem Fall benötigen Sie eine solche Tabelle, die Datumsangaben enthält. Unter der Annahme, dass diese Tabelle ValTableDates heißt und alle Daten zwischen Januar 2005 und Dezember 2010 enthält, würde die Abfrage wie folgt aussehen:

SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN  table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
ORDER BY dateReg

Die obige Abfrage erfordert möglicherweise ein wenig Optimierung, um einen Wert von Null anstelle von NULL zu erhalten, aber der Hauptpunkt ist, dass die Wertetabelle normalerweise der einfachste Weg ist, um Ausgabedatensätze für fehlende Datenpunkte bereitzustellen.
Eine Alternative ist zu verwenden eine Funktion/ein Ausdruck, der die gewünschte [Datum]-Sequenz innerhalb einer Unterabfrage erzeugt, aber dies ist im Allgemeinen weniger effizient und fehleranfälliger.