2016-11-29 53 views
2

我有以下SQLite中 BANK表:GROUP BY和在簡單的SQL獲得前N個

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 

回答

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