Mysql
 sql >> Base de données >  >> RDS >> Mysql

Une requête SQL à sélectionner jusqu'à ce que SUM(users_count) atteigne 1000

Cette solution effectuera une somme cumulée, s'arrêtant lorsque la somme dépasse 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;

Cela signifie que si vous avez deux valeurs de, disons, 800, la somme totale sera de 1600. Le premier SELECT est juste pour initialiser le @total variables.

Si vous voulez empêcher la somme de dépasser 1000, sauf dans les cas où une seule ligne a une valeur supérieure à 1000, alors je pense que cela fonctionne, même si vous devrez le soumettre à des tests rigoureux :

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);