mysql - 查找前 3 个已排序行的总和并检查总和是否超过 1000
问题描述
我有一个transaction
表,其列为sender
, receiver
,date
并且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 条。
解决方案
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
推荐阅读
- sql - Electron 和 Sqlite:SQLITE_NOTADB:文件不是数据库
- database - 如何从 MongoDb 的日期字段中查找最近的日期?
- svelte - Svelte 如何捕获浏览器后退按钮或卸载?
- ruby-on-rails - 我可以使用 Arel 创建的别名作为包含的一部分而不是加入来进行急切获取吗
- java - 错误:415 - 尝试使用 python 作为后端上传图像时,android 中出现不支持的媒体类型错误
- bash - 如何使用 shell 在所需的挂载点上挂载不同大小的 Nvm EBS 卷
- kubernetes - Kubernetes 为所有 Pod 提供服务,另一个只为领导者提供服务
- javascript - 如何使用 jQuery 或 AJAX 显示 ColdFusion 函数的返回值
- google-places-api - 为什么我没有从 Google Places API 获得多种类型的结果?
- javascript - 更改嵌套对象键的值