PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQL:Adicionar coluna com id incremental a SELECT


Use ROW_NUMBER() :

SQLFiddle
SELECT 
  name,
  ROW_NUMBER() OVER (ORDER BY name) AS id
FROM people;

EDITAR:

Diferença entre ORDER BY 1 vs ORDER BY column_name

SQLFiddleDemo
SELECT 
    name,
    ROW_NUMBER() OVER (ORDER BY name) AS id
FROM people;

/* Execution Plan */
QUERY PLAN WindowAgg (cost=83.37..104.37 rows=1200 width=38)
-> Sort (cost=83.37..86.37 rows=1200 width=38)
**Sort Key: name**
-> Seq Scan on people (cost=0.00..22.00 rows=1200 width=38)

SELECT 
    name,
    ROW_NUMBER() OVER (ORDER BY 1) AS id
FROM people;

/* Execution Plan */
QUERY PLAN WindowAgg (cost=0.00..37.00 rows=1200 width=38)
-> Seq Scan on people (cost=0.00..22.00 rows=1200 width=38)

No segundo caso, não há operação de classificação.

Você também pode escrever a segunda consulta como:
SELECT 
    name,
    ROW_NUMBER() OVER () AS id
FROM people;

Por que as pessoas escrevem ORDER BY 1 em funções em janela?

Porque em alguns dialetos é obrigatório e ORDER BY 1 funciona como um marcador de posição.

Oráculo:
SELECT 
  name,
  ROW_NUMBER() OVER (ORDER BY 1) AS id
FROM people;

TSQL:
SELECT 
    name,
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS id
FROM people;