Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Uma consulta SQL para selecionar até que SUM(users_count) atinja 1000


Esta solução realizará uma soma cumulativa, parando quando a soma exceder 1000:
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;

Isso significa que se você tiver dois valores de, digamos, 800, a soma total será 1600. O primeiro SELECT é apenas para inicializar o @total variável.

Se você quiser evitar que a soma ultrapasse 1000, exceto nos casos em que uma única linha tenha um valor maior que 1000, acho que isso funciona, embora você precise submetê-la a alguns testes rigorosos:
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);