U kunt vensterfuncties gebruiken. Ervan uitgaande dat dit een numerieke waarde is:
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;
De where
clausule filtert de rijen op 1 of 2 voor elke cobrand_id
(let op de 2*
), dus dit werkt voor zowel even als oneven getallen in elke partitie. Het gemiddelde van deze waarden is dan de mediaan.