È 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.