sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat součet s počtem větším než určitá částka

pomocí row_number() a odvozenou tabulku pro omezení každého recipient k jejich nejvyšším 3 obdrženým částkám a poté seskupení podle recipient vrací ty, které mají 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

vrátí:

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

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

Otázka byla upravena tak, že byly odstraněny některé relevantní informace z 3. revize otázky :co už bylo vyzkoušeno.

Na základě těchto informací jsem usoudil, že OP chtěl najít recipient který obdržel sum(amount)>=1024 ze 3 nebo méně všech převodů tohoto příjemce – neomezuje se na ty příjemce se 3 nebo méně převody a sum(amount)>=1024 .



  1. jooq rozšířit stávající dialekt. Přijměte dialekt MySQL na dialekt Apache Hive

  2. CREATE TABLE IF NOT EXISTS se nezdaří, protože tabulka již existuje

  3. Porovnání MySQL a LIKE s %

  4. Jak uložit arabský text do databáze mysql pomocí pythonu?