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

Aggregazione per valore mediano in SQL

È possibile utilizzare le funzioni della finestra. Supponendo che si tratti di un valore numerico:

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;

Il where La clausola filtra le righe su 1 o 2 per ogni cobrand_id (nota il 2* ), quindi funziona sia per i numeri pari che dispari in ciascuna partizione. La media di questi valori è quindi la mediana.