Detaillierte Erläuterung der Implementierungsmethode für kumulative Berechnungen von MySQL

Detaillierte Erläuterung der Implementierungsmethode für kumulative Berechnungen von MySQL

Dieser Artikel beschreibt das MySQL-Beispiel für eine kumulative Berechnung. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Vorwort

Wir haben eine Anfrage erhalten und das Produkt wollte die Benutzerwachstumskurve analysieren. Das heißt, eine Auflistung der Gesamtzahl der Personen pro Tag für einen bestimmten Zeitraum. Besser ist es, eine Evaluierung der Wirksamkeit der jüngsten Aktivitäten durchzuführen. Dieses statistische SQL hat trotzdem eine Weile gedauert. MySQL-Statistiken erfordern weiterhin bestimmte Kenntnisse.

Bedarfsanalyse

Benutzer-ID Registrierungszeit
1 03.09.2019
2 04.09.2019
3 04.09.2019
4 05.09.2019
5 05.09.2019
6 06.09.2019

Wenn wir uns die obige Benutzerinfo-Tabelle ansehen, können wir basierend auf der Zeitdimension problemlos die Anzahl der täglich hinzugefügten neuen Benutzer berechnen. Das SQL lautet wie folgt:

wähle Registrierungszeit, Anzahl (Benutzer-ID) Tagesmenge
 von user_info
Gruppieren nach Reg_Time 

Durch das obige SQL können wir leicht die folgende Liste erhalten:

Registrierungszeit Tagesmenge
03.09.2019 1
04.09.2019 2
05.09.2019 2
06.09.2019 1

Aber das ist nicht das Ergebnis, das wir wollen. Was wir wollen, ist die Gesamtsumme des letzten Tages plus den heutigen Nettozuwachs und so weiter. Das heißt, wir wollen:

Registrierungszeit Tagesmenge
03.09.2019 1
04.09.2019 3
05.09.2019 5
06.09.2019 6

Das ist etwas knifflig, wir müssen einige kumulative Berechnungen durchführen. Ich habe Selbstverknüpfung, Funktionen und andere Vorgänge ausprobiert, konnte aber trotzdem kein korrektes Ergebnis erzielen. An diesem Punkt scheint es perfekt zu sein, wenn Java-Code verwendet würde, um dies zu handhaben. Wir müssen nur den Anfangswert deklarieren und dann eine Schleife ausführen und akkumulieren, um das Ergebnis zu berechnen:


 öffentliche statische void main(String[] args) {
  arr = {1, 2, 2, 1};

  int[] ints = täglicheMengeArr(0, arr);


  für (int i : ints) {
   System.out.println("i = " + i);
  }


 }


 öffentliche statische int[] täglicheQuantityArr(int base, int[] täglicheIncrQuantity) {


  int[] Ergebnis = neue int[dailyIncrQuantity.length];
  //Füllung akkumulieren for (int i = 0; i < dailyIncrQuantity.length; i++) {
   Basis += tägliche Erhöhungsmenge[i];

   Ergebnis[i] = Basis;

  }
  Ergebnis zurückgeben;
 }

Der obige Pseudocode kann das Ergebnis berechnen. Versuchen Sie natürlich, diese komplexe Berechnung wenn möglich im Java-Geschäftscode durchzuführen. Die Produktanforderung besteht jedoch darin, dass wir eine SQL-Anweisung bereitstellen können, mit der die gewünschte Antwort direkt in der visuellen Daten-Engine abgerufen werden kann. Der obige Code hat mich inspiriert.
Verfügt MySQL über eine solche Variable? haben! Natürlich. Ich erinnere mich an ein sehr häufiges Szenario. Früher gab es oft Unternehmen, die von uns verlangten, Seriennummern auszugeben. Oracle verfügt über eine Pseudospalte „rownum“, MySQL jedoch nicht. MySQL generiert Seriennummern normalerweise durch die Deklaration von Auto-Increment-Variablen. Nehmen Sie die user_info-Tabelle als Beispiel:

wähle (@i:=@i+1) als Zeilennummer, Benutzer-ID 
 aus Benutzerinfo, (select @i:=0) als r

Mysql-Benutzervariablen

MySQL-Variablen werden in lokale Variablen, Benutzervariablen, Sitzungsvariablen und globale Variablen unterteilt. In der obigen Anweisung verwenden wir Benutzervariablen. Benutzervariablen beziehen sich auf Datenbankverbindungen. In einer Verbindung deklarierte Variablen verschwinden, nachdem sie in einer gespeicherten Prozedur erstellt wurden, bis die Verbindung zur Datenbankinstanz getrennt wird. In dieser Verbindung deklarierte Variablen können nicht in einer anderen Verbindung verwendet werden.
Benutzervariablen in MySQL müssen nicht im Voraus deklariert werden und werden bei Verwendung im Format @varname deklariert. Zuweisungsoperationen werden durch := oder = ausgeführt. Wenn Sie eine externe Ausgabe benötigen, müssen Sie select verwenden und die Zuweisung muss := verwenden.

Verwenden von Mysql-Benutzervariablen für kumulative Berechnungen

Nachdem wir uns mit Benutzervariablen befasst haben, wissen wir, wie man kumulative Berechnungen durchführt. Die tägliche kumulative Gesamtzahl der Personen in der Tabelle user_info sollte wie folgt aussehen:

 
 wähle eine.reg_time,
    a.täglich,
   @i:=@i+a.daily als Tagesmenge 
  von (wählen Sie reg_time,  
  Anzahl(Benutzer-ID) täglich 
  von Benutzergruppe von reg_time ) a ,
  (wähle @i:=0) b

Die Abfrageergebnisse erfüllen die logischen Anforderungen und lauten wie folgt.

Registrierungszeit täglich Tagesmenge
03.09.2019 1 1
04.09.2019 2 3
05.09.2019 2 5
06.09.2019 1 6

Aber hier gibt es eine kleine Falle. Im tatsächlichen Geschäft ist @i bei der Initialisierung möglicherweise nicht 0. Beispielsweise beträgt die Gesamtzahl der Personen vom 4. bis 6. September 1. Achten Sie hierauf besonders. Wenn wir es in der tatsächlichen Geschäftsentwicklung in logischer Kodierung implementieren können, wird empfohlen, einige komplexe Vorgänge in logischer Kodierung durchzuführen.

Zusammenfassen

Heute haben wir ein Problem der kumulativen Berechnung in SQL durch MySQL-Benutzervariablen gelöst. Ich frage mich, ob Sie noch andere gute Ideen haben? Hinterlassen Sie gerne eine Nachricht zur Diskussion.

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“, „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“ und „Zusammenfassung der allgemeinen MySQL-Funktionen“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • MySQL-Funktion zur Berechnung der Zeitdifferenz
  • Mehrere Möglichkeiten zum Berechnen des Alters anhand des Geburtstags in MySQL
  • Methode zum Berechnen der Zeitdifferenz in PHP und MySQL
  • Implementierungscode für die Berechnung der MySQL-Zeichenfolgenlänge (gb2312+utf8)
  • Bedeutung und Berechnungsmethode von QPS und TPS der MySQL-Datenbank
  • Zusammenfassung mehrerer wichtiger Methoden zur Berechnung und Optimierung des Leistungsindex für MySQL
  • Eine kurze Diskussion über die Berechnungsmethode von key_len in MySQL erklären
  • So berechnen Sie den Wert von ken_len im MySQL-Abfrageplan
  • Beispielanalyse der Intervallberechnung von MySQL-Datum und -Uhrzeit
  • Detaillierte Erklärung der MySQL-Datumsadditions- und -subtraktionsfunktionen
  • Beispiele für die Erstellung und Verwendung von MySQL-Triggern
  • Detaillierte Erklärung der grundlegenden Verwendung von MySQL-Triggern [Erstellen, Anzeigen, Löschen usw.]

<<:  Tutorial-Analyse zur Installation und Nutzung des Linux-Leistungsüberwachungstools nmon

>>:  Tomcat verstümmelte Zeichen in der Konsole in IDEA und wie man die IDEA-Kodierung auf UTF-8 einstellt

Artikel empfehlen

Einführung in integrierte JavaScript-Objekte

Inhaltsverzeichnis 1. Eingebaute Objekte 2. Mathe...

Einführung und Verwendung von Triggern und Cursorn in MySQL

Trigger-Einführung Ein Trigger ist eine spezielle...

JavaScript, um einen ausgefallenen Karusselleffekt zu erzielen

In diesem Artikel werden zwei Methoden zur Implem...

Implementieren eines Webplayers mit JavaScript

Heute zeige ich Ihnen, wie Sie mit JavaScript ein...

HTML-Tutorial: Sammlung häufig verwendeter HTML-Tags (6)

Diese eingeführten HTML-Tags entsprechen nicht un...

Detaillierte Erläuterung der kombinierten MySQL-Indexmethode

Für jedes DBMS sind die Indizes der wichtigste Op...

Abkürzungszeichen und Akronymzeichen

Die Tags <abbr> und <acronym> stellen ...

Stellen Sie die Grafana+Prometheus-Konfiguration mit Docker bereit

docker-compose-monitor.yml Version: '2' N...

Ursachen und Lösungen für die Front-End-Ausnahme 502 Bad Gateway

Inhaltsverzeichnis 502 Bad Gateway Fehlerbildung ...

Detaillierte Erläuterung der Nginx-Statusüberwachung und Protokollanalyse

1. Nginx-Statusüberwachung Nginx bietet eine inte...