sql >> Database >  >> RDS >> PostgreSQL

Hoe een sommatie te krijgen met een telling groter dan een bepaald bedrag

met behulp van row_number() en een afgeleide tabel om elke recipient te beperken naar hun top 3 ontvangen bedragen, vervolgens groeperen op recipient het retourneren van degenen met 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

retourneert:

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

rextester postgres demo:http://rextester.com/PFR74297

De vraag is bewerkt waardoor een aantal relevante informatie is verwijderd uit de derde revisie van de vraag :wat al geprobeerd is.

Op basis van die informatie concludeerde ik dat OP recipients . wilde vinden die een sum(amount)>=1024 . ontving vanaf 3 of minder overschrijvingen van die ontvanger -- niet beperkt tot die ontvangers met 3 of minder overschrijvingen en sum(amount)>=1024 .



  1. Spark:lezen van grote MySQL-tabel in DataFrame mislukt

  2. Database-uitzondering - Algemene fout:1021 Schijf vol

  3. PostgreSQL-query wordt sneller uitgevoerd met indexscan, maar engine kiest hash-join

  4. MySQL:Hoeveel queries per pagina is te veel?