Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez le nombre minimal de lignes avec une somme totale supérieure ou égale à un seuil donné

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 requête interne compte la somme cumulée et le champ supplémentaire mark , qui est égal à one tandis que la somme est inférieure et se transforme en zéro lorsqu'elle est supérieure à 0,9. Puisqu'il fonctionne une étape plus tard, il rassemble la première ligne où la somme est supérieure à la limite.

Le résultat de la sélection interne

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

Maintenant, dans la requête externe, il vous suffit de sélectionner les lignes avec mark égal à 1. Et il en résulte 4,2,3

démo sur sqlfiddle