Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете минимален брой редове с обща сума, по-голяма или равна на даден праг

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 

Вътрешната заявка отчита кумулативната сума и допълнителното поле mark , което е равно на one докато сумата е по-малка и се превръща в нула, когато е над 0,9. Тъй като работи една стъпка по-късно, той събира първия ред, където сумата е над ограничението.

Резултатът от вътрешния избор

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

Сега във външната заявка просто трябва да изберете редове с mark равно на 1. И това води до 4,2,3

демонстрация на sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. нормализиране на акцентирани знаци в MySQL заявки

  2. Свържете се с Docker MySQL контейнер от localhost?

  3. mysql oledb драйвер

  4. DATABASE() – Вземете текущото име на базата данни в MySQL

  5. Как да използвам mysql_escape_string() в Yii рамка?