mysql - 如何返回 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 条记录
解决方案
试试这个你需要使用subquery
and min
with group by
。使用subquery
我们可以返回满足给定数字的最小值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;
推荐阅读
- python - Python - 其他字符串中的单词大写
- java - 如何在 CursorAdapter 中获取我当前的 ID?
- algorithm - 生成从 1 到 n 的随机数,在 O(1) 空间中不重复
- powershell - 喷溅和格式化操作员在其他地方工作
- java - 单击按钮后,我可以将数据从 android 片段传递到 java 类吗?
- python - python - 使用 Beautiful Soup 查找“隐藏”链接
- python - 如何运行使用 pip3 安装的程序?
- twig - symfony 4 twig 覆盖默认变量
- angular - 如何通过 promise 使用 observable 并返回 observable
- symfony - 注释“@Gedmo\Mapping\Annotation\Sortable 不存在,或无法自动加载