【问题标题】:SQL - Select number of record based on SUM conditionsSQL - 根据 SUM 条件选择记录数
【发布时间】:2018-06-20 06:58:25
【问题描述】:

如果您有一个订单表,是否可以选择所有金额总和小于 $1000 的记录,假设该表已按金额 desc 排序 示例:

id product_id amount
1  1          500
2  3          400
3  2          300
4  1          200

获取所有金额小于$1000的订单 那么它应该返回 1 & 2,因为 1 和 2 的数量之和是 900

获取所有金额小于$1300的订单 那么它应该返回 1,2,3 因为 1,2,3 的总和是 1200

【问题讨论】:

  • 我猜,有可能,但据我所知,没有一个简单的查询。
  • 是的,我的知识有限,所以我的第一个想法是让光标遍历所有记录并尝试先对其求和,但这是一个非常糟糕的想法并且性能很慢,只是想知道是否有任何更好的解决方案
  • id 1 和 3 的总和也为 800
  • 搜索运行总计 - 您将在子查询中创建运行总计,然后从中进行选择。
  • 至少与 2 个产品的组合...这将是一个交叉连接,其中 id 不匹配...不知道如何为 n 多种组合执行此操作

标签: sql postgresql


【解决方案1】:

您正在寻找一个累计和:

select t.*
from (select t.*, sum(t.amount) over (order by t.amount desc) as cume_amount
      from t
     ) t
where cume_amount < 1000;

【讨论】:

  • 圣洁,你是我的英雄,这拯救了我的一天
【解决方案2】:
with a as ( 
    select  sum(amount) over (order by amount desc ) as amount_1 from test_order
)
select * from a where amount_1 < 1000;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多