Bạn có thể sử dụng các chức năng cửa sổ. Giả sử đây là giá trị số:
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
mệnh đề lọc các hàng thành 1 hoặc 2 cho mỗi cobrand_id
(lưu ý 2*
), vì vậy điều này hoạt động cho cả số chẵn và số lẻ trong mỗi phân vùng. Giá trị trung bình của các giá trị này sau đó là giá trị trung bình.