Selecione o número da linha no postgres

102

Como selecionar o número da linha no postgres.

Eu tentei isso:

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

e recebi este erro:

ERROR: erro de sintaxe em ou próximo de "over"
LINHA 1: selecione row_number () em (ORDER BY cgcode_odc_mapping_id) como

Eu verifiquei estas páginas: Como mostrar os números das linhas na consulta PostgreSQL?


Esta é a minha consulta:

 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 

este é o erro:

ERROR: erro de sintaxe em ou próximo a "over" LINE 1: selecione row_number () over (ORDER BY cgcode_odc_mapping_id) como

Maverick
fonte
3
Not Workingnão nos diz nada em que possamos ajudar. Por favor, você poderia fornecer mensagens de erro e / ou qualquer outra informação relevante. Além disso, especifique a versão do PostgreSQL que você está usando.
MatBailie de
1
Em suma, não está funcionando porque você está tentando usar funções de janela em uma versão antiga do PostgreSQL que não as suporta.
Craig Ringer de
2
Não existe PostgreSQL versão 1.8.4.
kgrittn de
1
Por favor, poste o resultado de select version()- não há (e nunca houve) uma versão 1.8
a_horse_with_no_name 01 de

Respostas:

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

Aqui está a seção relevante nos documentos.

PS Isso, na verdade, corresponde totalmente à resposta da pergunta referenciada.

Vyegorov
fonte
18
Você também deve especificar uma ordem na OVERcláusula: OVER (ORDER BY id). Caso contrário, o pedido não é garantido.
AlexM
3
@pumbo aparece row_number () retorna "o número da linha do conjunto de resultados" (ou seja, sempre 1 2 3 4 ... se você especificar over ()), no entanto, se você tiver uma consulta externa, reorganize a ordem dos resultados, claro ref: stackoverflow.com/a / 3397149/32453 comentários
rogerdpack