Heim >Datenbank >MySQL-Tutorial >Wie gehe ich mit fehlenden Daten in MySQL-Abfragen um?

Wie gehe ich mit fehlenden Daten in MySQL-Abfragen um?

Linda Hamilton
Linda HamiltonOriginal
2024-12-23 11:48:34266Durchsuche

How to Handle Missing Dates in MySQL Queries?

So füllen Sie Datenlücken in Ihren MySQL-Abfragen

Diese Frage untersucht ein häufiges Problem in MySQL, bei dem bei Abfragen zwischen Datenlücken auftreten können bestimmte Termine. Die vorhandene Abfrage des Benutzers ruft datumsbasierte Metriken ab, enthält jedoch keine Daten für fehlende Daten.

Datenlücken mithilfe einer Dummy-Zeilenquelle füllen

Um die Datenlücken zu schließen , besteht die Lösung darin, eine Hilfstabelle mit dem Namen „dates“ zu erstellen. Diese Tabelle enthält alle Daten vom gewünschten Start- bis Endbereich. Anschließend wird ein LEFT JOIN zwischen der Datumstabelle und der Nachrichtentabelle ausgeführt.

Hier ist die geänderte Abfrage:

SELECT  d.dt AS date,
        COUNT(*) AS total,
        SUM(attitude = 'positive') AS positive,
        SUM(attitude = 'neutral') AS neutral,
        SUM(attitude = 'negative') AS negative
FROM    dates d
LEFT JOIN
        messages m
ON      m.posted_at >= d.dt
        AND m.posted_at < d.dt + INTERVAL 1 DAYS
        AND spam = 0
        AND duplicate = 0
        AND ignore = 0
GROUP BY
        d.dt
ORDER BY
        d.dt

Erklärung:

  • Die Datumstabelle generiert eine Reihe unterschiedlicher Datumsangaben innerhalb des gewünschten Bereichs Bereich.
  • Der LEFT JOIN stellt sicher, dass alle Daten in der Datumstabelle enthalten sind, auch wenn keine passenden Nachrichten vorhanden sind.
  • Die Filter in der ON-Klausel stellen sicher, dass nur gültige Nachrichten für die angegebenen Daten vorhanden sind sind enthalten.
  • Die GROUP BY-Klausel aggregiert die Daten für jedes Datum.

Alternativen zur Verwendung von Dummy Rowsource

MySQL ist einzigartig, da es keine integrierte Funktion zum Generieren einer Datumsfolge enthält. Es gibt jedoch einige alternative Ansätze, die in anderen Datenbanksystemen verfügbar sind:

  • PostgreSQL verfügt über die Funktion „generate_series()“.
  • Oracle und SQL Server unterstützen die Rekursion mithilfe von CONNECT BY oder rekursiven CTEs.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit fehlenden Daten in MySQL-Abfragen um?. 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