--1
(select * , row_number() over (order by columnname) as tempcolumn
 from tablename )

--2
select * , row_number() over (order by defid) as tempcolumn
from fields
where tempcolumn between 1 and 2

第一个查询将为整个表添加一个新列。
我需要在检查tempcolumn的范围之后显示结果。
我尝试的第二个查询抛出了一个错误,如TunStar不存在。

最佳答案

可以使用子查询:

SELECT * FROM (
  select *,ROW_NUMBER() OVER(ORDER BY columnname) as tempcolumn
  from  tablename) sub
WHERE tempcolumn <= 2;

不能在同一级别的SELECT子句中使用WHERE中的别名,也不能将ROW_NUMBER()用作WHERE的一部分。
更多信息:
PostgreSQL: using a calculated column in the same query
Why no windowed functions in where clauses?

09-30 23:50