sql >> Base de Datos >  >> RDS >> Mysql

Seleccione el recuento mínimo de filas con una suma total mayor o igual que un umbral dado

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 consulta interna cuenta la suma acumulativa y el campo adicional mark , que es igual a one mientras que la suma es menor y se convierte en cero cuando está por encima de 0,9. Como está funcionando un paso más tarde, reúne la primera fila donde la suma está por encima del límite.

El resultado de la selección interna

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

Ahora, en la consulta externa, solo necesita seleccionar filas con mark igual a 1. Y da como resultado 4,2,3

demostración en sqlfiddle