在PostgreSQL中选择行号

132

如何在PostgreSQL中选择行号。

我尝试了这个:

select
    row_number() over (ORDER BY cgcode_odc_mapping_id)as rownum,
    cgcode_odc_mapping_id
  from access_odc.access_odc_mapping_tb
  order by cgcode_odc_mapping_id

我运行这个查询:

select row_number() over (ORDER BY cgcode_odc_mapping_id) as

出现了以下错误:

ERROR: syntax error at or near "over"
LINE 1: select row_number() over (ORDER BY cgcode_odc_mapping_id)as

我已经查阅了这些页面:如何在PostgreSQL查询中显示行号?

 select row_number() over (ORDER BY cgcode_odc_mapping_id)as rownum,cgcode_odc_mapping_id from access_odc.access_odc_mapping_tb order by cgcode_odc_mapping_id 

以下是错误提示:

ERROR: syntax error at or near "over" LINE 1: select row_number() over (ORDER BY cgcode_odc_mapping_id)as


3
"无法工作"这个描述并不能帮助我们提供任何帮助。请您提供错误信息和/或其他相关信息。同时,请指明您正在使用的PostgreSQL版本。 - MatBailie
1
可能是重复的问题:如何在PostgreSQL查询中显示行号? - vyegorov
1
猜测可能是因为您正在尝试在不支持窗口函数的旧版PostgreSQL上使用它们,所以无法正常工作。 - Craig Ringer
2
没有 PostgreSQL 版本 1.8.4。 - kgrittn
1
请发布 select version() 的输出 - 没有(也从来没有)1.8版本。 - user330315
显示剩余4条评论
1个回答

247
SELECT tab.*,
    row_number() OVER () as rnum
  FROM tab;

这里是相关章节的文档。

另外,事实上它完全符合所提到的问题的答案。


39
你还应该在OVER子句中指定一个排序方式:OVER (ORDER BY id)。否则,顺序不能得到保证。 - pumbo
5
@pumbo 表示 row_number() 返回“结果集的行号”(即如果您指定 over(),它始终为 1、2、3、4…),但是如果您有一个外部查询重新排列结果排序,则会改变。参考:https://dev59.com/9nA75IYBdhLWcg3wP2gg#3397149 评论 - rogerdpack
2
在我的情况下,即使没有外部查询,它也是以相反的顺序出现的;显式的 order by 解决了这个问题。 - Haroldo_OK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接