sql >> Database >  >> RDS >> Mysql

Een SQL-query om te selecteren totdat SUM(user_count) 1000 . bereikt

Deze oplossing voert een cumulatieve som uit en stopt wanneer de som de 1000 overschrijdt:

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;

Dat betekent dat als je twee waarden hebt van bijvoorbeeld 800, de som 1600 is. De eerste SELECT is alleen om de @total te initialiseren variabel.

Als je wilt voorkomen dat de som de 1000 overschrijdt, behalve in gevallen waarin een enkele rij een waarde heeft die groter is dan 1000, dan denk ik dat dit werkt, hoewel je het aan een aantal rigoureuze tests moet onderwerpen:

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


  1. SQL-zelfstudie voor beginners

  2. Inleiding tot synoniemen in SQL Server

  3. Converteer 'datetime2' naar 'datetime' in SQL Server (T-SQL-voorbeelden)

  4. MySQL LIMIT-clausule equivalent voor SQL SERVER