sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan får du summering med et antal større end et bestemt beløb

ved hjælp af row_number() og en afledt tabel for at begrænse hver recipient til deres top 3 modtagne beløb, derefter gruppering efter recipient returnerer dem, der har 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
 

returnerer:

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

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

Spørgsmålet blev redigeret, der fjernede nogle relevante oplysninger fra 3. revision af spørgsmålet :hvad der allerede er prøvet.

Baseret på den information konkluderede jeg, at OP ønskede at finde recipients der modtog en sum(amount)>=1024 fra 3 eller færre af nogen af ​​den pågældende modtagers overførsler -- ikke begrænset til de modtagere med 3 eller færre overførsler og sum(amount)>=1024 .



  1. VALG af data fra lagrede procedurer

  2. SQLite VAKUUM

  3. sikkert at angive 'order by'-klausul fra brugerinput i python / postgresql / psycopg2

  4. Hvordan vælger man første og sidste datarække fra et mysql-resultat?