我有一张订单表(基本上是以特定价格出售商品)
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语句中执行此操作?
答案 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
您可以在以下演示中测试此查询:
答案 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