嗨,可能有很多类似的实现,但有一件事我在这里的其他线程中找不到。因此,一个新的qs。
该表包含两列。
BOX_ID和No_of_Chocolates。
行:
BOX_ID, No_of_Chocolates
1, 10
2, 5
3, 15期望值是SQL查询应该根据我需要的巧克力数量返回。
案例1:所需巧克力=5
SQL结果应为:
1, 5(意思是,我可以从第一个盒子里拿到5块巧克力)
案例2:所需巧克力=10
SQL结果应为:
1, 10案例3:所需巧克力=13
SQL结果应为:
1, 10
2, 3(意思是,我需要从Box-1中获取所有内容,从Box-2中获取3)
案例4:所需巧克力= 22
SQL结果应为:
1, 10
2, 5
3, 7案例5:所需巧克力= 35
SQL结果应为:
1, 10
2, 5
3, 15(即使那里没有35块巧克力,它也应该提供所有可用的巧克力)
编辑:如果结果被误解,很抱歉...结果不会用逗号连接。它将是原样的两列。
发布于 2019-12-13 20:09:59
GMB的解决方案是正确的。但我认为有一种更简单的方式来表达类似的逻辑。
我会使用累积和,但如下所示:
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 https://stackoverflow.com/questions/59320256
复制相似问题