PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So erhalten Sie eine Summierung mit einer Anzahl größer als ein bestimmter Betrag

mit row_number() und eine abgeleitete Tabelle, um jeden recipient einzuschränken zu den 3 höchsten erhaltenen Beträgen, dann Gruppierung nach recipient Zurückgeben derjenigen mit 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

gibt zurück:

+--------------+
| account_name |
+--------------+
| Johnson      |
| Taylor       |
+--------------+

Rextester-Postgres-Demo:http://rextester.com/PFR74297

Die Frage wurde bearbeitet, wodurch einige relevante Informationen aus der 3. Überarbeitung der Frage entfernt wurden :was wurde schon versucht.

Basierend auf diesen Informationen kam ich zu dem Schluss, dass OP recipient finden wollte die einen sum(amount)>=1024 erhalten haben von 3 oder weniger Überweisungen dieses Empfängers – nicht beschränkt auf Empfänger mit 3 oder weniger Überweisungen und sum(amount)>=1024 .