sql >> Databasteknik >  >> RDS >> Mysql

En SQL-fråga att välja tills SUM(användare_antal) når 1000

Den här lösningen kommer att utföra en kumulativ summa som slutar när summan överstiger 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 att om du har två värden på t.ex. 800, blir summan 1600. Det första VALET är bara att initiera @total variabel.

Om du vill förhindra att summan överstiger 1000, förutom i fall där en enskild rad har ett värde som är större än 1000, så tror jag att det här fungerar, även om du måste utsätta det för några rigorösa tester:

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 Server DELETE – Ta bort en eller flera rader från en tabell med något avancerade scenarier

  2. KONTROLLERA BEGRÄNSNING för strängen för att endast innehålla siffror. (Oracle SQL)

  3. MYSQL trunkerat felaktigt DOUBLE-värde

  4. Hur man lagrar frågeresultat i variabel med mysql