Приведенный ниже запрос извлекает медианное значение LAT_N
из таблицы STATION
, находя запись, в которой число LAT_N
значений, больших, чем он сам, равно тем, которые меньше его самого.
SELECT ROUND(S.LAT_N, 4) AS MEDIAN FROM STATION S WHERE
(SELECT COUNT(LAT_N) FROM STATION WHERE LAT_N < S.LAT_N) =
(SELECT COUNT(LAT_N) FROM STATION WHERE LAT_N > S.LAT_N)
Это умное решение, которое кто-то другой опубликовал в качестве решения вопроса Хакерранка, но мне интересно, как именно SQL-механизм подойдет к этому.
Будет ли такая необычная структура запроса вызывать только грубое форсирование двух подзапросов до тех пор, пока их COUNT
не станут равными, или есть простая возможность для оптимизации, которую я упускаю?
(Я понимаю, что этот запрос не предоставляет медиану в каждом случае. Я только после объяснения того, будет ли механизм SQL пытаться оптимизировать его до любого уровня лучше, чем перечисление методом "грубой силы" для каждого подзапроса).