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

Agregace podle střední hodnoty v SQL

Můžete použít funkce okna. Za předpokladu, že se jedná o číselnou hodnotu:

select cobrand_id, avg(xsum) as median
from (select m.*,
             row_number() over (partition by cobrand_id order by xsum) as seqnum,
             count(*) over (partition by cobrand_id) as cnt
      from tmp_median m
     ) m
where 2*seqnum in (cnt, cnt + 1, cnt + 2)
group by cobrand_id;

where klauzule filtruje řádky na 1 nebo 2 pro každý cobrand_id (všimněte si 2* ), takže to funguje pro sudá i lichá čísla v každém oddílu. Průměr těchto hodnot je pak medián.




  1. Průvodce Pgpool pro PostgreSQL:Část první

  2. Tabulka s názvem 'jako' v MySQL

  3. Data řazení SQL od řádku n+1 do n-1

  4. Dynamičtější způsob vnořování víceúrovňových kategorií