获取总和小于或等于数据集中值的记录

Posted

技术标签:

【中文标题】获取总和小于或等于数据集中值的记录【英文标题】:Fetch records with sum less then or equal to values in dataset 【发布时间】:2021-05-10 00:32:10 【问题描述】:

这个问题是这里问题Query to get all records until the sum of column less than or equal a value的延伸

对于表格:项目

slno item price
1 item1 1000
2 item2 2000
3 item3 3000
4 item4 4000
5 item5 5000
6 item6 6000

表格:值

id value
1 3500
2 6000
3 10000
4 21000

获取总和(价格)等于或小于表值中每个数字的项目中的所有记录

结果是

id item
1 item1
1 item2
2 item1
2 item2
2 item3
3 item1
3 item2
3 item3
3 item4
4 item1
4 item2
4 item3
4 item4
4 item5
4 item6
SELECT slno, item, price
  FROM
(
  SELECT slno, item, price, 
  (
    SELECT SUM(price)
      FROM table1
     WHERE slno <= t.slno
  ) total
    FROM table1 t
) q
 WHERE total <= 10000
 ORDER BY slno

以上解决方案适用于单个值 10000 此解决方案由 https://***.com/users/1920232/peterm 提供

如何获取表中每个值的记录:值

【问题讨论】:

【参考方案1】:

使用累积和然后join

select v.*, i.*
from (select i.*, sum(price) over (order by slno) as running_price
      from items i
     ) i join
     values v
     on i.running_price <= v.value
order by v.id, i.slno;

【讨论】:

虽然在这种情况下“over (order by slno)”会起作用,因为 slno 的顺序和价格正在增加,但是在 slno 和价格的随机顺序的情况下,“over (order by price)”是更好的选择。

以上是关于获取总和小于或等于数据集中值的记录的主要内容,如果未能解决你的问题,请参考以下文章

算法--快排

动态规划算法:硬币的最大总和(小于或等于k)

排序算法---快速排序

java - 数据结构 - 快速排序

SQL:获取行列值的总和

每日一算法|快速排序---第三天