You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询:查找不超过3笔交易累计到账≥1000的收款人

问题需求

现有transaction交易表,包含sender(付款方)、receiver(收款方)、date(交易日期)、amount(交易金额)四个字段,需要查询所有符合以下条件的收款方姓名:收款方的交易记录中,存在不超过3笔的交易累计金额≥1000,最终结果按收款方姓名升序排序。

解决思路

要判断收款方是否能通过不超过3笔交易凑够1000元,最优验证方式为取该收款方金额最高的前3笔交易求和:如果最高的3笔累计金额都达不到1000,那么其他任意组合的3笔及以内交易也不可能达到要求。

实现代码

通用窗口函数写法(支持MySQL8.0+/PostgreSQL/Oracle等所有支持窗口函数的数据库)

WITH ranked_trans AS (
    SELECT 
        receiver,
        amount,
        -- 按收款方分组,组内交易按金额从高到低排序打行号
        ROW_NUMBER() OVER (PARTITION BY receiver ORDER BY amount DESC) AS rn
    FROM transaction
)
SELECT receiver
FROM ranked_trans
WHERE rn <= 3 -- 仅取每个收款方金额最高的前3笔
GROUP BY receiver
HAVING SUM(amount) >= 1000 -- 前3笔累计达标即符合条件
ORDER BY receiver ASC;

低版本MySQL兼容写法(不支持窗口函数场景)

SELECT t1.receiver
FROM transaction t1
WHERE (
    -- 统计当前交易在对应收款方的所有交易中,金额排名在前3以内
    SELECT COUNT(*)
    FROM transaction t2
    WHERE t2.receiver = t1.receiver AND t2.amount >= t1.amount
) <= 3
GROUP BY t1.receiver
HAVING SUM(t1.amount) >= 1000
ORDER BY t1.receiver ASC;
结果验证

针对示例数据,计算结果为B、D,和预期输出一致:

  • B的前2笔最高交易金额为500+500=1000,满足条件
  • D的第1笔最高交易金额为4000,满足条件
  • C的前2笔最高交易金额为400+60=460,不满足
  • A的前3笔最高交易金额均为50,累计150,不满足

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:45:04