Когда вы сортируете значения, медиана будет либо точно посередине (нечетное количество строк), либо средним из двух значений около середины (четное количество строк). Для этих значений верно следующее:
- не менее половины всех значений (включая его самого) равны или меньше
- не менее половины всех значений (включая его самого) равны или больше
Когда вы найдете эти / эти значения (назовем их кандидаты ), вам понадобится среднее значение различных значений-кандидатов.
Выше может быть выражается следующим запросом:
select round(avg(distinct lat_n), 4) as median_lat_n
from station s
cross join (select count(*) as total from station) t
where t.total <= 2 * (select count(*) from station s1 where s1.lat_n <= s.lat_n)
and t.total <= 2 * (select count(*) from station s1 where s1.lat_n >= s.lat_n)
Обратите внимание, что это довольно медленное решение для больших таблиц.