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>
Erklärung:
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!