为什么分区需要嵌套选择?

kon*_*gun 0 sql postgresql

我有一个页面显示每个用户的10条消息(不要问我为什么)
我有以下代码:

SELECT *, row_number() over(partition by user_id) as row_num
FROM "posts"
WHERE row_num <= 10

它不起作用.

当我这样做:
SELECT *
FROM (
SELECT *, row_number() over(partition by user_id) as row_num FROM "posts") as T
WHERE row_num <= 10

它确实有效.
为什么我需要嵌套查询来查看row_num列?顺便说一句,在第一个请求中我实际上在结果中看到它但不能使用where该列的关键字.

Joa*_*son 7

它似乎与任何查询都是相同的"规则",列别名对WHERE子句不可见;

这也将失败;

SELECT id AS newid
FROM test
WHERE newid=1;     -- must use "id" in WHERE clause
Run Code Online (Sandbox Code Playgroud)