Как использовать столбец результата 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'

0 ответов

Другие вопросы по тегам