sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man får summering med ett antal större än ett visst belopp

med row_number() och en härledd tabell för att begränsa varje recipient till sina topp 3 mottagna belopp och gruppera sedan efter recipient returnerar de som 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

returnerar:

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

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

Frågan redigerades som tog bort en del relevant information från tredje versionen av frågan :vad som redan har provats.

Baserat på den informationen drog jag slutsatsen att OP ville hitta recipient som fick en sum(amount)>=1024 från 3 eller färre av någon av den mottagarens överföringar -- inte begränsat till de mottagare med 3 eller färre överföringar och sum(amount)>=1024 .



  1. Sträng bokstaver och escape-tecken i postgresql

  2. MYSQL PHP-uppdateringsdata för varje rad

  3. SQL-fel med Order By i Subquery

  4. Hur man hittar tabeller som innehåller en specifik kolumn i SQL Server