Heim > Datenbank > MySQL-Tutorial > Wie berechnet man laufende Summen in MySQL-Versionen vor 8.0?

Wie berechnet man laufende Summen in MySQL-Versionen vor 8.0?

Barbara Streisand
Freigeben: 2025-01-02 22:51:38
Original
902 Leute haben es durchsucht

How to Calculate Running Totals in MySQL Versions Prior to 8.0?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage