използвайки row_number()
и извлечена таблица за ограничаване на всеки recipient
към първите 3 получени суми, след което групирани по recipient
връща тези, които имат sum(amount)>=1024
select recipient as account_name
from (
select *
, row_number() over (
partition by recipient
order by amount desc
) as rn
from transfers
) as i
where rn < 4
group by recipient
having sum(amount)>=1024
връща:
+--------------+
| account_name |
+--------------+
| Johnson |
| Taylor |
+--------------+
demo postgres rextester:http://rextester.com/PFR74297
Въпросът беше редактиран, което премахна част от уместната информация от 3-та редакция на въпроса :това, което вече беше изпробвано.
Въз основа на тази информация заключих, че OP иска да намери recipients
които са получили sum(amount)>=1024
от 3 или по-малко от всеки от преводите на този получател -- не се ограничава до тези получатели с 3 или по-малко превода и sum(amount)>=1024
.