Abfragen mit SUM() in der MySQL-WHERE-Klausel
Bei der Arbeit mit MySQL-Tabellen kann es erforderlich sein, Zeilen basierend auf aggregierten Berechnungen abzurufen , beispielsweise die Summe vorheriger Werte. Die direkte Verwendung von SUM() in einer WHERE-Klausel führt jedoch möglicherweise nicht zu den erwarteten Ergebnissen.
Angenommen, Sie haben eine Tabelle mit den Spalten „id“ und „cash“:
id | cash 1 200 2 301 3 101 4 700
Zum Abrufen die erste Zeile, in der die Summe aller vorherigen Barmittel einen bestimmten Wert (z. B. 500) überschreitet, mit WHERE SUM(cash) > 500 funktioniert nicht wie erwartet.
Lösung mit der HAVING-Klausel
MySQL ermöglicht aggregierte Vergleiche in der HAVING-Klausel und nicht in der WHERE-Klausel. Um das gewünschte Ergebnis zu erzielen, können Sie die folgende Abfrage verwenden:
GROUP BY ... HAVING SUM(cash) > 500
Dies erfordert jedoch die Definition einer GROUP BY-Klausel, die möglicherweise nicht erforderlich ist.
Verwendung einer verschachtelten Unterabfrage mit laufender Summe
Ein alternativer Ansatz besteht darin, eine verschachtelte Unterabfrage zu verwenden, um die laufende Summe zu berechnen und diese dann mit dem angegebenen Wert in der WHERE-Klausel zu vergleichen:
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
In Bei dieser Abfrage wird eine Unterabfrage verwendet, um die laufende Summe für jede Zeile in der Tabelle zu berechnen. Der Alias running_total wird verwendet, um in der WHERE-Klausel auf diesen Wert zu verweisen. Die LIMIT-Klausel wird hinzugefügt, um nur die erste Zeile zurückzugeben, die der Bedingung entspricht.
Dieser Ansatz ermöglicht den direkten Vergleich des Gesamtwerts in der WHERE-Klausel und liefert das gewünschte Ergebnis, ohne dass eine GROUP BY-Klausel erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie frage ich nach Zeilen ab, bei denen die Summe der vorherigen Werte einen Schwellenwert in MySQL überschreitet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!