2011-04-04 79 views
0

可以通过row_number() OVER()编号结果计数行吗?在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 

回答

0

你不能这样做在postgresql中。寻找expression这里:4.2.8. Window Function Calls,它说:..它不能输出列名或号码..

您可以通过用户的子查询:

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

我不使用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