Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen Sie eine kumulative Summenspalte in MySQL

Verwendung einer korrelierten Abfrage:

  SELECT t.id,
         t.count,
         (SELECT SUM(x.count)
            FROM TABLE x
           WHERE x.id <= t.id) AS cumulative_sum
    FROM TABLE t
ORDER BY t.id

Verwendung von MySQL-Variablen:

  SELECT t.id,
         t.count,
         @running_total := @running_total + t.count AS cumulative_sum
    FROM TABLE t
    JOIN (SELECT @running_total := 0) r
ORDER BY t.id

Hinweis:

  • Der JOIN (SELECT @running_total := 0) r ist ein Cross Join und ermöglicht die Deklaration von Variablen, ohne dass ein separates SET erforderlich ist Befehl.
  • Der Tabellenalias, r , wird von MySQL für jede Unterabfrage/abgeleitete Tabelle/Inline-Ansicht benötigt

Vorbehalte:

  • MySQL-spezifisch; nicht auf andere Datenbanken portierbar
  • Der ORDER BY ist wichtig; es stellt sicher, dass die Reihenfolge mit dem OP übereinstimmt und kann größere Auswirkungen auf kompliziertere Variablenverwendungen haben (IE:Pseudo-ROW_NUMBER/RANK-Funktionalität, die MySQL fehlt)