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