Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL заявка за избор, докато SUM(user_count) достигне 1000

Това решение ще изпълни кумулативна сума, спирайки, когато сумата надвиши 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;

Това означава, че ако имате две стойности от, да речем, 800, общата сума ще бъде 1600. Първият SELECT е само за инициализиране на @total променлива.

Ако искате да предотвратите сумата да надхвърли 1000, освен в случаите, когато един ред има стойност по-голяма от 1000, тогава мисля, че това работи, въпреки че ще трябва да го подложите на някои стриктни тестове:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Седмица от годината за седмици, започващи от събота

  2. SQL диалектът не е конфигуриран (Phpstorm)

  3. Проблем с извеждането на арабски текст в php mysql utf-8

  4. Използване на етикет в клауза за име в sqlachemy

  5. Проблем с MySQL актуализиране на поле DATETIME от ISO 8601 формат