Heim > Datenbank > MySQL-Tutorial > Wie rufe ich mit der SUM()-Funktion von MySQL eine Zeile basierend auf der Summe vorheriger Werte ab?

Wie rufe ich mit der SUM()-Funktion von MySQL eine Zeile basierend auf der Summe vorheriger Werte ab?

Susan Sarandon
Freigeben: 2024-11-04 16:00:03
Original
411 Leute haben es durchsucht

How to Retrieve a Row Based on the Sum of Previous Values Using MySQL's SUM() Function?

Verwendung der MySQL-Funktion SUM() in der WHERE-Klausel für den Zeilenabruf

MySQL ermöglicht Benutzern die Durchführung aggregierter Berechnungen innerhalb von Unterabfragen und deren Verwendung als Kriterien zur Zeilenauswahl in der WHERE-Klausel. Es ist jedoch wichtig, die Einschränkungen der Verwendung von Aggregatfunktionen in diesem Zusammenhang zu verstehen.

Stellen Sie sich das folgende Szenario vor: Sie haben eine Tabelle mit den Spalten „id“ und „cash“ und möchten die erste Zeile abrufen, in der sich die Summe befindet aller bisherigen Barwerte überschreitet einen bestimmten Schwellenwert.

Beispieltabelle:

id cash
1 200
2 301
3 101
4 700

Gewünschtes Ergebnis:

Für Bei einem Eingabeschwellenwert von 500 ist das erwartete Ergebnis Zeile 3, da die Summe der Geldwerte für die Zeilen 1 und 2 (200 301 = 501) den Schwellenwert überschreitet.

Falscher Ansatz:

Versuch, WHERE SUM(cash) > 500 liefert nicht das richtige Ergebnis, da Aggregate in einer WHERE-Klausel nicht direkt verglichen werden können.

Lösung:

Um diese Einschränkung zu überwinden, können Sie die HAVING-Klausel in verwenden Verbindung mit einer Unterabfrage, um die laufende Summe an Bargeld für jede Zeile zu berechnen.

<code class="sql">SELECT y.id, y.cash
FROM (
    SELECT t.id,
           t.cash,
           (SELECT SUM(x.cash)
              FROM TABLE x
             WHERE x.id <= t.id) AS running_total
     FROM TABLE t
     ORDER BY t.id
) y
WHERE y.running_total > 500
ORDER BY y.id
LIMIT 1;</code>
Nach dem Login kopieren

Erklärung:

  1. Die Unterabfrage berechnet die laufende Summe an Bargeld für Jede Zeile verwendet eine verschachtelte SELECT-Anweisung.
  2. Das Ergebnis der Unterabfrage wird mit dem Alias ​​y versehen.
  3. Die WHERE-Klausel prüft, ob die laufende Summe für eine Zeile den gewünschten Schwellenwert überschreitet (in diesem Fall 500). ).
  4. Schließlich ruft die LIMIT-Klausel nur die erste qualifizierende Zeile ab.

Dieser Ansatz stellt sicher, dass die erste Zeile, in der die Summe aller vorherigen Barwerte den Schwellenwert überschreitet, genau identifiziert wird .

Das obige ist der detaillierte Inhalt vonWie rufe ich mit der SUM()-Funktion von MySQL eine Zeile basierend auf der Summe vorheriger Werte ab?. 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