sql >> Databasteknik >  >> RDS >> Mysql

Välj minimalt antal rader med totalsumman större än eller lika med en given tröskel

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 

Den inre frågan räknar kumulativ summa och tilläggsfält mark , vilket är lika med one medan summan är mindre och förvandlas till noll när den är över 0,9. Eftersom det fungerar ett steg senare, samlar det den första raden där summan är över gränsen.

Resultatet av det inre urvalet

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

Nu i den yttre frågan behöver du bara välja rader med mark lika med 1. Och det resulterar i 4,2,3

demo på sqlfiddle



  1. Entity Framework MySQL tinyint(1) System.Boolean.Parse FormatException

  2. PHP PDO-undantag + varning på MySQL har försvunnit?

  3. Skapa märken för min webbplats, bästa sättet att lagra användarmärken? Använder PHP

  4. Hur SPACE() fungerar i MariaDB