Group By并在Simple SQL中获得前N个

时间:2016-11-29 04:33:41

标签: sql sqlite group-by greatest-n-per-group

我在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

1 个答案:

答案 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