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.