Heim >Datenbank >MySQL-Tutorial >Wie berechnet man die kumulative Summe in MySQL, ohne analytische Funktionen zu verwenden?

Wie berechnet man die kumulative Summe in MySQL, ohne analytische Funktionen zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 05:33:42563Durchsuche

How to Calculate Cumulative Sum in MySQL Without Using Analytic Functions?

Kumulative Summe in MySQL ohne SET

In MySQL stellt das Fehlen von Analysefunktionen wie der kumulativen Summe eine Herausforderung dar, wenn Sie versuchen, laufende Summen zu berechnen . Es gibt jedoch zwei Ansätze, diese Funktionalität zu emulieren.

Korrelierte Unterabfragen

Dieser Ansatz verwendet eine Unterabfrage innerhalb der Hauptabfrage, um die kumulative Summe zu erhalten. Es kann jedoch ressourcenintensiv und komplex sein, insbesondere wenn es um komplizierte Verknüpfungen geht.

Benutzervariablen

Alternativ können die Benutzervariablen von MySQL genutzt werden, um eine Kontrollunterbrechung durchzuführen Verarbeitung. Bei dieser Methode werden die Ergebnisse der ursprünglichen Abfrage sortiert und in eine äußere Abfrage eingeschlossen.

In der äußeren Abfrage:

  • Benutzervariablen werden initialisiert, um sicherzustellen, dass keine vorherigen Werte stören.
  • Die umschlossene Abfrage wird ausgeführt, wobei eine ORDER BY-Klausel für die sequentielle Zeilenverarbeitung hinzugefügt wird.
  • Die folgende Logik lautet angewendet:

    • Wenn die aktuellen ID- und Tageswerte mit denen aus der vorherigen Zeile übereinstimmen, addieren Sie den aktuellen Betrag zur kumulativen Zwischensumme.
    • Andernfalls setzen Sie die kumulative Zwischensumme auf Null zurück und weisen Sie zu es ist der aktuelle Betrag.

Die Benutzervariablen werden mit den aktuellen ID- und Tageswerten nach dem aktualisiert Berechnung.

Beispielabfrage

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, @cumtotal := 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

Wenn die Spaltenreihenfolge geändert werden muss:

SELECT d.id, d.day, d.hr, d.amount, d.cumulative_total
FROM (
       // query from above
     ) d

Dieser Ansatz ist für Versionen von MySQL geeignet vor 8.0 und kann eine effiziente Lösung zum Berechnen kumulativer Summen über eine Reihe von Zeilen bieten.

Das obige ist der detaillierte Inhalt vonWie berechnet man die kumulative Summe in MySQL, ohne analytische Funktionen zu verwenden?. 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