Ниже запрос для вычисления медианы:
with res1 as
(select id,ROW_NUMBER() over (order by id) "median_row_num" from test ),
res2 as
(select count(median_row_num) as i from res1)
select id as "median" from res1 where res1.median_row_num = (select case when i%2 = 0 then i/2 else i/2+1 end from res2)
Примечание: Помните, медиана - это средний элемент в отсортированном списке чисел.
, если a = [3,4,2,6,7 ]
отсортированный список a = [2,3,4,6,7]
количество элементов равно 5, поэтому медиана будет равна 4.
Но в случае, если a = [2,3,4,6,7,8]
Количество элементов 6, которое является четным числом, поэтому есть два средних элемента 4 и 6
Таким образом, медиана будет 5 ( 4 + 6 = 10/2 = 5)
Таким образом, приведенный выше запрос хорош для нечетного и четного количества, он всегда даст вам первую половину элемента.