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

标签 sql postgresql

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

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

它不起作用。

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

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

最佳答案

这似乎与任何查询的“规则”相同,列别名对 WHERE 子句不可见;

这也会失败;

SELECT id AS newid
FROM test
WHERE newid=1;     -- must use "id" in WHERE clause

关于sql - 为什么分区需要嵌套选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18249126/

相关文章:

sql - Oracle-插入具有自动增量ID的新行

sql - 有值且没有 PostgreSQL 的条件

postgresql - 无法使用带有复制命令的平面文件将数据插入到 postgresql 表中

sql - 条件值

mysql - SQL查询以获取2个日期有效时间表之间的数据

mysql - 更新一个字段以增加直到另一个字段改变

sql - 对于分成多个部分的天平,哪种表格设计更好?

sql - PostgreSQL 动态表访问

ruby-on-rails - 如何查看什么属性给我这个错误 : value too long for type character varying(255)

sql - 查询删除列匹配或为 NULL 的行