mysql - 如何返回 sum(field) <= value 的行

标签 mysql

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

假设我有一个表演示

场景: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 条记录

最佳答案

试试这个 您需要使用子查询min 以及group by。使用子查询,我们可以返回最小的id,其中sum满足给定的数字,然后加入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 fiddle http://www.sqlfiddle.com/#!9/a1d07/13

关于mysql - 如何返回 sum(field) <= value 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059171/

相关文章:

java - 更新查询,工作正常但不是我的 dao 类

php5 和 jQuery ajax 返回数组

mysql - 优化mysql查询的建议

mysql - 由于循环引用,如何在迁移到 google cloud sql 时禁用外键检查

php - 使用选择框更新显示查询

mysql - “用户”SQL 表失控。寻找更好的方法

php - 无法将 PHP 连接到 XAMPP 数据库以发送数据

php - Firebase 使用 php 过滤数据

mysql - 应该如何针对大量写入和少量读取优化/调整 mysql (100 :1). Read perf reqd

mysql - Laravel 构建器条件子句可以返回超过 1 个条件