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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案
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年前 评论

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