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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
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年前 评论

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