2016-11-29 3 views
2

Я следующую таблицу в SQLite БАНК:Group By и получить Top N в простой SQL

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 

 Смежные вопросы

  • Нет связанных вопросов^_^