我有一个transaction
表,表中的列为sender
、receiver
、date
和amount
。我想找到所有接收者的名称,这些接收者的记录总和至少为1000,且不超过3个交易。
- 示例:**
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条。
5条答案
按热度按时间btqmn9zl1#
jtw3ybtb2#
您可以使用
group by receiver
和GROUP_CONCAT()
在逗号分隔的列表中按降序收集每个receiver
的所有金额。然后使用
SUBSTRING_INDEX
提取前3个金额,并将它们相加,以检查它们的总和是否等于或大于1000:请参见demo。
当然,这不能很好地缩放超过3个数量。
uyto3xhc3#
你可以使用mysql变量来计算行数,然后根据行数进行过滤,就像这样
此处演示
h5qlskok4#
以下内容适用于MySQL 8+(5.7不在原始问题或原始标签中)。
您可以使用
row_number()
按金额降序对事务处理进行排序。然后汇总:在较早的版本中,您可能需要使用变量枚举行,因为数据中可能存在联系:
jjhzyzn05#