Der MySQL-Tagesstatistikbericht trägt 0 ein, wenn für diesen Tag keine Daten vorliegen

Der MySQL-Tagesstatistikbericht trägt 0 ein, wenn für diesen Tag keine Daten vorliegen

1. Reproduktion des Problems:

Zählen Sie die Gesamtzahl jedes Tages für jeden Tag. Wenn es Tage ohne Daten gibt, ignoriert die Gruppierung diese Tage. Wie füllt man sie mit 0? Wie in der folgenden Abbildung dargestellt, werden die Daten für die sieben Tage vom 3.10. bis zum 10.10. gezählt, von denen nur der 8. und 10. Daten aufweisen. Auf diese Weise werden nur 2 Daten zurückgegeben, was den statistischen Anforderungen des Berichts nicht entspricht. Erwarten Sie, dass kein Wert mit 0 gefüllt wird

2. Ändern Sie Ihre Denkweise:

Wir verwenden eine Reihe aufeinanderfolgender Tage als linke Tabelle, verknüpfen dann die abzufragenden Daten links und gruppieren schließlich nach: Tabelle mit aufeinanderfolgenden Tagen, t1, linke Verknüpfung, Geschäftsdaten, t2, Gruppierung nach t1.day, wie unten gezeigt:

WÄHLEN
 t1.`Tag`,
 COUNT(t2.user_id) Zahlungsnummer
AUS
 (WÄHLEN
 @cdate := DATE_ADD(@cdate, INTERVALL - 1 TAG) TAG
 AUS
 (WÄHLEN
  @cdate := DATE_ADD('20171219', INTERVALL + 1 TAG)
 AUS
  Reihenfolge) t0
 GRENZE 7) t1
 LINKS VERBINDEN
 (WÄHLEN
  DATUM(a.Erstellungszeit) TAG,
  a.Benutzer-ID
 AUS
  pay_payment eine
  Händler-Shop beitreten b
  ON a.Bestellnummer = b.Bestellnummer
 WHERE DATE(Erstellungszeit) <= '20171219'
  UND DATUM(Erstellungszeit) > DATE_SUB('20171219', INTERVALL 7 TAGE)
  ) t2
 EIN t2.Tag = t1.Tag
GRUPPE NACH t1.`Tag`;

2.1 Tabelle der aufeinanderfolgenden Tage

WÄHLEN
 @cdate := DATE_ADD(@cdate, INTERVALL - 1 TAG) TAG
 AUS
 (WÄHLEN
  @cdate := DATE_ADD('20171219', INTERVALL + 1 TAG)
 AUS
  Reihenfolge) t0
 GRENZE 7

Die Ausführungsergebnisse sind wie folgt:

SQL-Analyse:

1. @cdate := 是定義名為cdate的變量并賦值(select 后面必須用:=)

2. .@cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) addiert einen Tag zum übergebenen Datum '20171219'

3. SELECT @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) FROM `order` und suche eine Tabelle mit mehr als 10 Datensätzen. Die Ausführungsergebnisse sind wie folgt:

4. .@cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY dekrementiert die Anzahl der Tage in der definierten cdate-Variable um 1 (Selbstdekrement)

5. LIMIT 7 Begrenzen Sie die Anzahl der Datensätze. Das ist alles. Wir haben die Datensätze 7 Tage vor dem angegebenen Datum erhalten.

2.2 Links verbinden und dann gruppieren

left join group by t1.day

Das heißt, gemäß den mit der linken Tabelle verknüpften Geschäftsdaten werden die Daten nach dem Datum der linken Tabelle gruppiert, d. h. sie werden in die angegebenen 7 Tage Daten unterteilt. Wenn ein Datensatz vorhanden ist, wird die Anzahl der Einträge gezählt, und wenn kein Datensatz vorhanden ist, ist sie 0.

Endgültiges Ausführungsergebnis:

Zusammenfassen

Oben ist der Implementierungscode, den ich Ihnen vorgestellt habe, um 0 in MySQL gemäß dem täglichen statistischen Bericht einzutragen, wenn an diesem Tag keine Daten vorliegen. Ich hoffe, er wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Implementierungscode für statistische MySQL-Abfragen
  • Probleme bei der Verwendung der IF-Funktion (Fall) zur Berechnung bedingter Statistiken für das SUM-Feld in MySQL
  • So verwenden Sie MySQL, um die Anzahl identischer Werte in einer Spalte abzufragen
  • Beispiel für die Verwendung von MySQL zum Zählen der Anzahl unterschiedlicher Werte in einer Spalte
  • Eine einzelne Select-Anweisung implementiert MySQL-Abfragestatistiken
  • MySQL-Implementierungsmethode zum Gruppieren von Statistiken alle 10 Minuten
  • Grundlegende Nutzungs-Tutorials für verschiedene Datenstatistikabfragen in MySQL
  • Zusammenfassung der MySQL-Zeitstatistikmethoden
  • mysql erhält statistische Daten innerhalb eines bestimmten Zeitraums
  • Analyse von Fallen bei der Verwendung der MySQL-Statistikfunktion GROUP_CONCAT
  • Beispielanalyse des Prinzips und der Lösung des MySQL-Gleitreihenfolgeproblems

<<:  So geben Sie Speicherplatz unter CentOS 6 oder CentOS 7 frei

>>:  JS Canvas-Oberfläche und Animationseffekte

Artikel empfehlen

So installieren Sie Docker auf Raspberry Pi

Da Raspberry Pi auf der ARM-Architektur basiert, ...

MySQL-Schnellwiederherstellungslösung basierend auf dem Zeitpunkt

Der Grund für das Schreiben dieses Artikels ist, ...

Einige weniger bekannte Sortiermethoden in MySQL

Vorwort ORDER BY 字段名升序/降序. Ich glaube, jeder hier...

JavaScript imitiert den Jingdong-Karusselleffekt

In diesem Artikel wird der spezifische Code für J...

Unvollständige Lösung für die Verwendung von Eingabetyp=Textwert=str

Ich bin heute auf ein sehr seltsames Problem gesto...

WeChat-Applet implementiert Sortierfunktion basierend auf Datum und Uhrzeit

Ich habe vor kurzem ein kleines Programmierprojek...

Lösung für „Keine Eingabedatei angegeben“ in nginx+php

Heute ist in meiner lokalen Entwicklungsumgebung ...

So verwenden Sie Filter zur Implementierung der Überwachung in Zabbix

Als ich kürzlich an Überwachungsgeräten arbeitete...