【问题标题】: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://stackoverflow.com/users/1920232/peterm 提供

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

【问题讨论】:

    标签: mysql sql


    【解决方案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)”是更好的选择。
    猜你喜欢
    • 2014-03-16
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多