Berechnung der kumulativen Summe über Zeilensätze in MySQL
Sie stehen vor der Aufgabe, ein laufendes Aggregat für eine bestimmte Spalte in einem Satz zu erhalten von Zeilen in MySQL. Die Herausforderung liegt im Fehlen integrierter Analysefunktionen in MySQL vor Version 8.0.
Ansatz unter Verwendung von Benutzervariablen
In dieser Situation können Sie Benutzervariablen verwenden um die Funktionalität analytischer Funktionen zu emulieren. Dazu müssen Sie Ihre ursprüngliche Abfrage in eine andere Abfrage einschließen und ORDER BY verwenden, um Zeilen nacheinander zu verarbeiten.
Die äußere Abfrage prüft, ob die Werte für ID und Tag der aktuellen Zeile mit denen der vorherigen Zeile übereinstimmen. Wenn dies der Fall ist, wird die kumulative Gesamtsumme durch Addition des Betrags aus der aktuellen Zeile aktualisiert. Wenn nicht, wird die kumulative Summe zurückgesetzt und auf den Betrag der aktuellen Zeile gesetzt.
Beispielabfrage
Hier ist eine Beispielabfrage, die diesen Ansatz demonstriert:
SELECT IF(@prev_id = c.id AND @prev_day = c.day, @cumtotal := @cumtotal + c.amount, @cumtotal := c.amount) AS cumulative_total , @prev_id := c.id AS `id` , @prev_day := c.day AS `day` , c.hr , c.amount AS `amount' FROM ( SELECT @prev_id := NULL , @prev_day := NULL , @subtotal := 0 ) i JOIN ( select id, day, hr, amount from ( //multiple joins on multiple tables)a left join (//unions on multiple tables)b on a.id=b.id ORDER BY 1,2,3 ) c
Indem Sie die gesamte Abfrage in Klammern setzen und als Inline-Ansicht verwenden, können Sie die Spalten wie folgt neu anordnen erwünscht:
SELECT d.id , d.day , d.hr , d.amount , d.cumulative_total FROM ( // query from above ) d
Einschränkungen
Beachten Sie, dass dieser Ansatz für große Datensätze rechenintensiv sein kann. Wenn die Prädikate in der ursprünglichen Abfrage außerdem komplex sind, kann dies die Komplexität der Lösung weiter erhöhen.
Das obige ist der detaillierte Inhalt vonWie berechnet man laufende Summen in MySQL-Versionen vor 8.0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!