2016-11-29 2 views
2

내가 SQLite는 BANK 테이블 다음 한 간단한 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 거래를 찾을 필요가있다. PARTITION, RANK, 심지어는 사용자 정의 변수와 같은 특정 기능을 사용하는 SQLite와 호환되지 않는 다른 여러 데이터베이스에 대해 여러 솔루션이 제공됩니다.

SQLite에서 사용할 수 있도록 간단한 SQL 쿼리로 솔루션이 필요합니다.

예상 결과 :

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