首页 > 解决方案 > 如何返回 sum(field) <= value 的行

问题描述

这个概念是找到sum(fCurrAmt)可能高于输入金额但不应低于输入金额的行。我不知道如何详细解释这个creteria。

假设我有一个表格演示

场景:1

id fCurrAmt price
------------------
1    1      10
2    1      20
3    2      25
4    3      30

如果输入的金额是 3,我需要返回前 3 行

id fCurrAmt price
------------------
1    1      10
2    1      20
3    2      25

在上述情况下,sum(fCurrAmt) 为 4,高于输入的金额。

场景:2

id fCurrAmt price
------------------
1    1      10
2    1      20

如果输入的金额是3,我需要返回没有记录。

在上述情况下,sum(fCurrAmt) 为 2,低于输入的金额。

我在场景 1 中尝试过使用以下代码

SELECT a.id,a.price,a.total,a.fCurrAmt from (
  select b.id,b.price,b.fCurrAmt,(
        select sum(fCurrAmt) from demo c where c.id <= b.id order by c.id
  ) as total from demo b
) a where a.total <= 3

它只返回前 2 条记录

标签: mysql

解决方案


试试这个你需要使用subqueryand minwith group by。使用subquery我们可以返回满足给定数字的最小值idsum然后加入id以检索到 id 的完整行

SELECT * 
FROM test t
INNER JOIN(
        SELECT MIN(id) valId 
        FROM (
            SELECT t.id,
                    (SELECT SUM(t1.fCurrAmt) 
                    FROM test t1 
                    WHERE t1.id <= t.id) AS Rowsum
            FROM test t) t2 
         WHERE Rowsum >= 3) t1 ON t1.valId >= t.id;

SQL 小提琴 http://www.sqlfiddle.com/#!9/a1d07/13


推荐阅读