2011-04-04 77 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