查询获取所有记录,直到列的总和小于或等于一个值

mysql - 查询获取所有记录,直到列的总和小于或等于一个值

我想获取一个表中的所有记录,直到特定列的总和小于或等于’n’。

例如:

表:数据

slno item price

1 item1 1000
2 item2 2000
3 item3 3000
4 item4 4000
5 item5 5000
6 item6 6000
我想从上面的表中获取所有记录,直到总和(价格)小于或等于 10000

因此,对于上表,我的结果将是前 4 条记录。查询的数据量比较大,希望有比较简单性能快的sql

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
SELECT slno, item, price FROM ( 
      SELECT *, SUM(price) OVER (ORDER BY slno) AS total_price FROM table 
) AS t WHERE total_price <= 10000;
1年前 评论
杨超越 (楼主) 1年前
她来听我的演唱会 1年前
Alvin90 1年前
讨论数量: 7
SELECT slno, item, price FROM ( 
      SELECT *, SUM(price) OVER (ORDER BY slno) AS total_price FROM table 
) AS t WHERE total_price <= 10000;
1年前 评论
杨超越 (楼主) 1年前
她来听我的演唱会 1年前
Alvin90 1年前

是的,子查询在数据量大的时候确实很慢,维护对应索引。或者查询出数据,用代码处理数据

1年前 评论
select *
from t,
     (select @sum := 0) as t1
where (@sum := @sum + price) <= 10000;

或者

select *
from t as t1
where (select sum(t2.price) from t as t2 where t2.slno <= t1.slno) <= 10000;
1年前 评论

维护一个额外的字段,例如cumulative_sum

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!