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

Wybierz minimalną liczbę wierszy o łącznej sumie większej lub równej podanemu progowi

select id from 
    (select id, if(not(@sum > 0.9), 1, 0) mark,  (@sum:[email protected]+value) as sum 
        from trade cross join  (select @sum:=0) s  
        where price=2 order by value asc) t 
where mark =1 

Zapytanie wewnętrzne zlicza skumulowaną sumę i dodatkowe pole mark , co jest równe one podczas gdy suma jest mniejsza i zmienia się w zero, gdy przekracza 0,9. Ponieważ działa krok później, zbiera pierwszy wiersz, w którym suma jest powyżej limitu.

Wynik wewnętrznego wyboru

id   mark   sum
4    1      0.30000001192092896
2    1      0.800000011920929
3    1      1.699999988079071

Teraz w zewnętrznym zapytaniu wystarczy wybrać wiersze za pomocą mark równy 1. I daje wynik 4,2,3

demonstracja sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pomoc algorytmu zapytań PHP MYSQL

  2. Używanie UUID jako klucza podstawowego z Laravel 5

  3. Czym są silniki baz danych MySQL?

  4. Uzyskiwanie dostępu do baz danych mysql kontenera docker

  5. Jak uzyskać pojedynczą wartość z bazy danych za pośrednictwem Entity Framework