在postgres中选择行号


102

如何在postgres中选择行号。

我尝试了这个:

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

并得到此错误:

错误:“超过”或附近的语法错误
第1行:在(ORDER BY cgcode_odc_mapping_id)上选择row_number()

我已经检查了这些页面:如何在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 

这是错误:

错误:“超过”或接近“结束”时的语法错误第1行:选择row_number()over(ORDER BY cgcode_odc_mapping_id)as


3
Not Working没有告诉我们任何我们可以提供帮助的内容。请您提供错误消息和/或任何其他相关信息。另外,请指定您使用的PostgreSQL版本。
MatBailie 2012年


1
猜测一下,它不起作用,因为您试图在不支持PostgreSQL的旧版本上使用窗口函数。
Craig Ringer

2
没有PostgreSQL 1.8.4版本。
kgrittn

1
请发布以下内容的输出select version()-没有(从来没有)版本1.8
a_horse_with_no_name 2013年

Answers:


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

这是文档中的相关部分。

PS,实际上,这与所引用问题的答案完全匹配。


18
您还应该在OVER子句中指定订单:OVER (ORDER BY id)。否则,不能保证订单。
AlexM

3
@pumbo出现row_number()返回“结果集的行号”(即,始终为1 2 3 4 ...,如果您指定over ()),但是如果您有外部查询,则重新排列结果的顺序,当然这是参考:stackoverflow.com/a / 3397149/32453评论
rogerdpack '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.