sql >> Database teknologi >  >> RDS >> Mysql

En SQL-forespørgsel, der skal vælges, indtil SUM(brugerantal) når 1000

Denne løsning vil udføre en kumulativ sum, der stopper, når summen overstiger 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;

Det betyder, at hvis du har to værdier på f.eks. 800, vil summen være 1600. Det første SELECT er blot at initialisere @total variabel.

Hvis du vil forhindre summen i at overstige 1000, bortset fra i tilfælde, hvor en enkelt række har en værdi på mere end 1000, så tror jeg, at dette virker, selvom du bliver nødt til at udsætte det for nogle strenge tests:

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. YEAR() Eksempler – MySQL

  2. Hvor mange kolonner kan du have (maksimalt) i en MySQL-tabel?

  3. Opret dato fra dag, måned, år felter i MySQL

  4. MySQL brugerdefinerede funktioner