Можете да използвате функции на прозореца. Ако приемем, че това е числова стойност:
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;
where
клауза филтрира редовете до 1 или 2 за всеки cobrand_id
(обърнете внимание на 2*
), така че това работи както за четни, така и за нечетни числа във всеки дял. Тогава средната стойност на тези стойности е медианата.