PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SQL:Dodaj kolumnę z przyrostowym identyfikatorem do SELECT

Użyj ROW_NUMBER() :

SQLFiddle

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

EDYTUJ:

Różnica między 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)

W drugim przypadku nie ma operacji sortowania.

Możesz także napisać drugie zapytanie jako:

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

Dlaczego ludzie piszą ORDER BY 1 w funkcjach okienkowych?

Ponieważ w niektórych dialektach jest to wymagane i ORDER BY 1 zachowuje się jak symbol zastępczy.

Wyrocznia:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. (Jeden stół) weź wiersze bez połączenia

  2. Typ danych Postgres ENUM czy SPRAWDŹ OGRANICZENIE?

  3. Popraw wydajność zapytań PostgreSQL, pozostawiając złącze dla 100 milionów danych

  4. Grupuj Postgres według zapytania

  5. wybierz/wyświetl ostatnio wstawiony identyfikator seryjny w postgresie