MySql:获取所有匹配的行,直到列的总和

时间:2016-06-03 00:35:32

标签: mysql sql

我有一张订单表(基本上是以特定价格出售商品)

id | price | qty
-----------------
1    0.11    12
2    0.111   77
3    0.1111  51
4    0.112   62
5    0.114   17

现在让我们说购买订单到达买家提供购买100件商品的价格高达0.112。

我想写一个查询,检索所有匹配的卖出优惠,其中价格<= 0.112最多100件。所以在上面的例子中,我想返回第1,2和3行。

如何在单个select语句中执行此操作?

3 个答案:

答案 0 :(得分:0)

一种选择是按id的顺序计算数量的运行总数,然后限制为总计小于100的记录。

SELECT o.id, o.price, o.qty
FROM orders o
WHERE o.price <= 0.112 AND
    (SELECT SUM(qty)
     FROM orders WHERE o.id >= id AND price <= 0.112) <= 100

您可以在以下演示中测试此查询:

SQLFiddle

答案 1 :(得分:0)

我建议您使用变量进行累积求和,然后使用此信息:

select o.*
from (select o.*, (@q := @q + qty) as runq
      from orders o cross join
           (select @q := 0) params
      order by qty
     ) t
where o.price <= 0.112 and
      o.qty - qty < 100 and
      o.qty >= 100;

答案 2 :(得分:0)

多数民众赞成看起来很简单

SELECT * FROM orders WHERE price <= 0.112 AND qty <= 100