Как использовать столбец результата ROW_NUMBER()OVER(ORDER BY FOO) в агрегатной функции
Наличие следующих требований: Медиана определяется как число, отделяющее верхнюю половину набора данных от нижней половины. Запросите медиану северных широт (LAT_N) на STATION и округлите ответ до десятичных знаков.
Формат ввода
Таблица STATION описывается следующим образом:
Field : Type
ID : NUMBER
CITY : VARCHAR2(21)
STATE : VARCHAR2(2)
LAT_N : NUMBER
LONG_W: NUMBER
где LAT_N — северная широта, а LONG_W — западная долгота.
Я попытался использовать предложение over для создания одного отсортированного окна с своего рода «индексом», который можно использовать для поиска медианы:
SELECT AVG(SUBQUERY.LAT_N)
FROM
(SELECT ROW_NUMBER()OVER(ORDER BY LAT_N ASC) -1 as MY_INDEX,LAT_N
FROM STATION) AS SUBQUERY
HAVING SUBQUERY.MY_INDEX IN (FLOOR(MAX(SUBQUERY.MY_INDEX)/2), CEIL(MAX(SUBQUERY.MY_INDEX)/2))
Я также попробовал:
SELECT AVG(SUBQUERY.LAT_N)
FROM
(SELECT ROW_NUMBER()OVER(ORDER BY LAT_N ASC) -1 as MY_INDEX,LAT_N
FROM STATION) AS SUBQUERY
HAVING SUBQUERY.MY_INDEX IN (FLOOR((COUNT(SUBQUERY.LAT_N)-1)/2), CEIL((COUNT(SUBQUERY.LAT_N)-1)/2))
При использовании определенных значений внутри условия поведение будет желаемым, например:
SELECT AVG(SUBQUERY.LAT_N)
FROM
(SELECT ROW_NUMBER()OVER(ORDER BY LAT_N ASC) -1 as MY_INDEX,LAT_N
FROM STATION) AS SUBQUERY
WHERE SUBQUERY.MY_INDEX IN (5,6)
При этом я получаю среднее значение LAT_N строк 5 и 6.
Что я не учитываю и из-за чего запрос получает следующую ошибку?
ERROR 1054 (42S22) at line 4: Unknown column 'SUBQUERY.MY_INDEX' in 'having clause'