首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要SQL来选择行,直到一列的总和达到最后一行不会完全使用值的值为止

需要SQL来选择行,直到一列的总和达到最后一行不会完全使用值的值为止
EN

Stack Overflow用户
提问于 2019-12-13 18:08:21
回答 1查看 356关注 0票数 1

嗨,可能有很多类似的实现,但有一件事我在这里的其他线程中找不到。因此,一个新的qs。

该表包含两列。

BOX_ID和No_of_Chocolates。

行:

代码语言:javascript
复制
BOX_ID, No_of_Chocolates
1, 10
2, 5
3, 15

期望值是SQL查询应该根据我需要的巧克力数量返回。

案例1:所需巧克力=5

SQL结果应为:

代码语言:javascript
复制
1, 5

(意思是,我可以从第一个盒子里拿到5块巧克力)

案例2:所需巧克力=10

SQL结果应为:

代码语言:javascript
复制
1, 10

案例3:所需巧克力=13

SQL结果应为:

代码语言:javascript
复制
1, 10
2, 3

(意思是,我需要从Box-1中获取所有内容,从Box-2中获取3)

案例4:所需巧克力= 22

SQL结果应为:

代码语言:javascript
复制
1, 10
2, 5
3, 7

案例5:所需巧克力= 35

SQL结果应为:

代码语言:javascript
复制
1, 10
2, 5
3, 15

(即使那里没有35块巧克力,它也应该提供所有可用的巧克力)

编辑:如果结果被误解,很抱歉...结果不会用逗号连接。它将是原样的两列。

EN

回答 1

Stack Overflow用户

发布于 2019-12-13 20:09:59

GMB的解决方案是正确的。但我认为有一种更简单的方式来表达类似的逻辑。

我会使用累积和,但如下所示:

代码语言:javascript
复制
select b.box_id,
       least(:needed - sum_upto_box, no_of_chocolates) as from_this_box
from (select b.*,
             sum(no_of_chocolates) over (order by box_id) - no_of_chocolates as sum_upto_box
      from boxes b
     ) b
where sum_upto_box < :needed 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59320256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档