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

Vælg minimalt antal rækker med totalsum større end eller lig med en given tærskel

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 indre forespørgsel tæller kumulativ sum og yderligere felt mark , som er lig med one mens sum er mindre og bliver til nul, når den er over 0,9. Da den arbejder et trin senere, samler den den første række, hvor summen er over grænsen.

Resultatet af det indre udvalg

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

Nu skal du i den ydre forespørgsel blot vælge rækker med mark lig med 1. Og det resulterer i 4,2,3

demo på sqlfiddle



  1. Sådan indstilles Postgres-stivariabel på Windows 10

  2. Hvad er den nemmeste måde at køre et script på, når der modtages en e-mail?

  3. Udskriv fejlfindingsoplysninger fra gemt procedure i MySQL

  4. Hvad er nyt i MariaDB Server 10.5?