Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie die minimale Anzahl von Zeilen aus, deren Gesamtsumme größer oder gleich einem bestimmten Schwellenwert ist

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 

Die innere Abfrage zählt die kumulierte Summe und das zusätzliche Feld mark , was gleich one ist während die Summe kleiner ist und zu Null wird, wenn sie über 0,9 liegt. Da es einen Schritt später funktioniert, sammelt es die erste Zeile, in der die Summe über dem Limit liegt.

Das Ergebnis der inneren Auswahl

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

Jetzt müssen Sie in der äußeren Abfrage nur Zeilen mit mark auswählen gleich 1. Und es ergibt 4,2,3

Demo auf sqlfiddle