PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Agregando por valor mediano em SQL


Você pode usar funções de janela. Assumindo que este é um valor numérico:
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;

O where cláusula filtra as linhas para 1 ou 2 para cada cobrand_id (observe o 2* ), então isso funciona para números pares e ímpares em cada partição. A média desses valores é então a mediana.