我在SQLite中有以下表格 BANK:
user-id sender-name receiver-name amount
----------------------------------------
1 A B 200
2 A C 250
3 A B 400
4 A B 520
4 A D 120
4 A D 130
4 A B 110
4 A B 300
4 A B 190
4 A C 230
4 A B 110
4 A C 40
4 A C 80
我需要从每个接收器中找出前3个事务。为其他几个数据库提供了多种解决方案,这些解决方案与SQLite不兼容,导致使用某些功能,如PARTITION和RANK,甚至是用户定义的变量。
我需要简单SQL查询中的解决方案才能与SQLite一起使用。
预期结果:
receiver-name amount
--------------------
B 560
C 1220
D 250
答案 0 :(得分:2)
我设法只使用简单的自我加入功能。
现在您可以使用您的首选值更新N,对于我的案例前3,它将是LIMIT 3.
SELECT receiver-name ,(
SELECT SUM(amount) as sum_amount
FROM (
SELECT amount
FROM bank as b2
WHERE b2.receiver-name = b.receiver-name
ORDER BY b2.amount DESC
LIMIT 3
)
) as sum_amount
FROM bank as b
GROUP BY receiver-name