sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL:Lägg till kolumn med inkrementellt id till SELECT

Använd ROW_NUMBER() :

SQLFiddle

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

EDIT:

Skillnad mellan ORDER BY 1 kontra 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)

I det andra fallet finns det ingen sorteringsoperation.

Du kan också skriva den andra frågan som:

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

Varför människor skriver ORDER BY 1 i fönsterfunktioner?

För i vissa dialekter krävs det och ORDER BY 1 fungerar som platshållare.

Oracle:

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;


  1. Hur kontrollerar man om en postgres-användare finns?

  2. Utmaningslösningar för nummerseriegenerator – del 3

  3. Hur REGEXP_SUBSTR()-funktionen fungerar i MySQL

  4. Hur använder man en PostgreSQL-behållare med befintliga data?