Использование псевдонимов в предложении OVER () - PullRequest
1 голос
/ 04 апреля 2011

Могу ли я подсчитать результаты через row_number() OVER() по подсчитано строк?

, например

SELECT *,
    users::numeric/population::numeric*100 AS penetration,
    row_number() OVER(ORDER BY penetration DESC)
FROM states ORDER BY penetration DESC

генерирует ошибку:

ERROR: column "penetration" does not exist

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

вы не можете сделать это в postgresql.Ищите expression здесь: 4.2.8.Вызовы функций окна , он говорит .. это не могут быть имена или номера выходных столбцов ..

Вы можете использовать подзапрос пользователя:

SELECT states.*, penetration, row_number() OVER(ORDER BY penetration DESC)
  FROM states
  JOIN (SELECT id, users::numeric/population::numeric*100 AS penetration
          FROM states) s_pen on spen.id = states.id
 ORDER BY s_pen.penetration DESC
1 голос
/ 04 апреля 2011

Я не использую Postgre, но для T-SQL вы должны сделать что-то вроде этого:

SELECT *,
    penetration,
    row_number() OVER(ORDER BY penetration DESC)
FROM 
(
   select users::numeric/population::numeric*100 AS penetration
   from states
)pen
 ORDER BY penetration DESC
...