Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie SQL do wybrania, aż SUMA (liczba_użytkowników) osiągnie 1000

To rozwiązanie wykona sumę skumulowaną, zatrzymując się, gdy suma przekroczy 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;

Oznacza to, że jeśli masz dwie wartości, powiedzmy 800, suma wyniesie 1600. Pierwszy SELECT to po prostu inicjalizacja @total zmienna.

Jeśli chcesz, aby suma nie przekroczyła 1000, poza przypadkami, w których pojedynczy wiersz ma wartość większą niż 1000, myślę, że to działa, chociaż będziesz musiał poddać go rygorystycznym testom:

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. Jak przeliczyć liczbę tygodni na datę?

  2. Node.js łączenie przez ssh

  3. Ostrzeżenie:mysqli_connect():(HY000/1045):Odmowa dostępu dla użytkownika 'username'@'localhost' (przy użyciu hasła:TAK)

  4. Migracja w celu zmiany domyślnej wartości pola i zmiany wszystkich istniejących wartości rekordów na nową wartość domyślną tylko wtedy, gdy ma starą wartość domyślną.

  5. Jak usunąć duplikaty z tabeli MySQL?