Heim > Datenbank > MySQL-Tutorial > Wie kann ich kumulative Summen in MySQL effizient berechnen?

Wie kann ich kumulative Summen in MySQL effizient berechnen?

Barbara Streisand
Freigeben: 2025-01-05 16:15:40
Original
637 Leute haben es durchsucht

How Can I Efficiently Calculate Cumulative Sums in MySQL?

Kumulative Summe über Zeilen in MySQL

Um die kumulative Summe für jede ID, gruppiert nach Tagesstunde, zu ermitteln, wird ein gemeinsamer Ansatz verwendet in MySQL. Aufgrund des Fehlens von Analysefunktionen in früheren Versionen von MySQL werden zwei Hauptmethoden verwendet: eine korrelierte Unterabfrage oder MySQL-Benutzervariablen.

Ansatz mit korrelierten Unterabfragen

Diese Strategie beinhaltet eine Unterabfrage, die die kumulative Summe für jede Zeile basierend auf Übereinstimmungskriterien berechnet. Bei umfangreichen Datensätzen kann es jedoch ressourcenintensiv sein.

Ansatz mit Benutzervariablen

Eine effizientere Methode umfasst MySQL-Benutzervariablen und eine umschlossene Abfrage mit einer ORDER BY-Klausel um die Reihenfolge der Zeilenverarbeitung sicherzustellen. Die folgenden Schritte beschreiben diesen Ansatz:

  1. Initialisieren Sie Benutzervariablen, um Störungen durch vorhandene Sitzungswerte zu vermeiden.
  2. Betten Sie die ursprüngliche Abfrage als Inline-Ansicht mit der ORDER BY-Klausel ein.
  3. Führen Sie die kumulative Summenberechnung innerhalb einer SELECT-Anweisung durch und vergleichen Sie die Werte der vorherigen und aktuellen Zeile.
  4. Weisen Sie die Werte der aktuellen Zeile zu Werte in Benutzervariablen für die nächste Iteration.

Ein Beispiel für diesen Ansatz:

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
    (
      // Original query with multiple joins and unions
    ) a
    LEFT JOIN
    (
      // Unions on multiple tables
    ) b
    ON a.id = b.id
    ORDER BY 1, 2, 3
  ) c
Nach dem Login kopieren

Dieser Ansatz ermöglicht eine effiziente Berechnung kumulativer Summen in MySQL-Versionen vor 8.0, wenn Fensterfunktionen wurden eingeführt.

Das obige ist der detaillierte Inhalt vonWie kann ich kumulative Summen in MySQL effizient berechnen?. 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