sql >> Databáze >  >> RDS >> Mysql

SQL dotaz pro výběr, dokud SUM(users_count) nedosáhne 1000

Toto řešení provede kumulativní součet a zastaví se, když součet překročí 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;

To znamená, že pokud máte dvě hodnoty, řekněme 800, celkový součet bude 1600. První SELECT slouží pouze k inicializaci @total proměnná.

Pokud chcete zabránit tomu, aby součet přesáhl 1000, kromě případů, kdy má jeden řádek hodnotu větší než 1000, pak si myslím, že to funguje, i když to budete muset podrobit přísnému testování:

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. Jak TO_DAYS() funguje v MariaDB

  2. Vyberte, kde číslo řádku =číslo řádku

  3. Otázky k rozhovoru s datovým inženýrem s Pythonem

  4. Vyberte řádek a řádky kolem něj