Heim  >  Artikel  >  Datenbank  >  Wie frage ich nach Zeilen ab, bei denen die Summe der vorherigen Werte einen Schwellenwert in MySQL überschreitet?

Wie frage ich nach Zeilen ab, bei denen die Summe der vorherigen Werte einen Schwellenwert in MySQL überschreitet?

Susan Sarandon
Susan SarandonOriginal
2024-11-05 01:35:01396Durchsuche

How to Query for Rows Where the Sum of Previous Values Exceeds a Threshold in MySQL?

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!

Stellungnahme:
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