Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eine SQL-Abfrage, die ausgewählt werden soll, bis SUM(users_count) 1000 erreicht

Diese Lösung führt eine kumulative Summe durch und stoppt, wenn die Summe 1000 überschreitet:

SELECT NULL AS users_count, NULL AS total
  FROM dual
 WHERE (@total := 0)
 UNION
SELECT users_count, @total := @total + users_count AS total
  FROM messages_queue
 WHERE @total < 1000;

Das heißt, wenn Sie zwei Werte von beispielsweise 800 haben, ist die Gesamtsumme 1600. Das erste SELECT dient lediglich dazu, @total zu initialisieren Variable.

Wenn Sie verhindern möchten, dass die Summe 1000 überschreitet, außer in Fällen, in denen eine einzelne Zeile einen Wert von mehr als 1000 hat, dann denke ich, dass dies funktioniert, obwohl Sie es einigen strengen Tests unterziehen müssen:

SELECT NULL AS users_count, NULL AS total, NULL AS found
  FROM dual
 WHERE (@total := 0 OR @found := 0)
 UNION
SELECT users_count, @total AS total, @found := 1 AS found
  FROM messages_queue
 WHERE (@total := @total + users_count)
   AND @total < 1000
 UNION
SELECT users_count, users_count AS total, 0 AS found
  FROM messages_queue
 WHERE IF(@found = 0, @found := 1, 0);