Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona il numero minimo di righe con somma totale maggiore o uguale a una determinata soglia

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 

La query interna conta la somma cumulativa e il campo aggiuntivo mark , che è uguale a one mentre sum è minore e diventa zero quando è superiore a 0,9. Poiché funziona un passaggio dopo, raccoglie la prima riga in cui la somma è superiore al limite.

Il risultato della selezione interna

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

Ora nella query esterna devi solo selezionare le righe con mark uguale a 1. E risulta in 4,2,3

demo su sqlfiddle