PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Aggregieren nach Medianwert in SQL

Sie können Fensterfunktionen verwenden. Angenommen, dies ist ein numerischer Wert:

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;

Das where -Klausel filtert die Zeilen entweder auf 1 oder 2 für jede cobrand_id (beachten Sie die 2* ), das funktioniert also sowohl für gerade als auch für ungerade Zahlen in jeder Partition. Der Durchschnitt dieser Werte ist dann der Median.