首页 > 解决方案 > 查找前 3 个已排序行的总和并检查总和是否超过 1000

问题描述

我有一个transaction表,其列为sender, receiverdate并且amount我想在不超过 3 个事务中找到其记录总和至少为 1000 的所有接收者的名称。

例子:

sender, receiver, date, amount
A, B, 2020-01-01, 500
C, B, 2020-01-01, 500 
D, B, 2020-21-01, 200
A, C, 2021-01-01, 400
D, C, 2021-01-01, 60
A, D, 2021-01-01, 4000
C, A, 2019-01-01, 50
D, A, 2019-02-01, 50
B, A, 2019-03-01, 50
E, A, 2019-04-01, 50

答:

B, D. Answer in sorted name order

解释: B 仅在 2 笔交易中收到 1000。D 仅在 1 笔交易中收到 > 1000。

我知道如何根据名称对记录进行分组,但不知道如何查找 3 条记录的总和并检查是否超过 1000 条。

标签: mysqlsqlmysql-5.7

解决方案


WITH cte AS (
    SELECT receiver, amount,
           ROW_NUMBER() OVER (PARTITION BY receiver ORDER BY amount DESC) rn
    FROM transaction 
)
SELECT receiver
FROM cte
WHERE rn <= 3
GROUP BY receiver
HAVING SUM(amount) >= 1000

推荐阅读