sql >> Databáze >  >> RDS >> PostgreSQL

SQL:Přidejte sloupec s přírůstkovým ID do SELECT

Použijte ROW_NUMBER() :

SQLFiddle

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

UPRAVIT:

Rozdíl mezi 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)

V druhém případě neprobíhá žádná operace řazení.

Druhý dotaz můžete také napsat jako:

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

Proč lidé píší ORDER BY 1 ve funkcích v okně?

Protože v některých dialektech je vyžadováno a ORDER BY 1 funguje jako zástupný symbol.

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. Solení mých hashů pomocí PHP a MySQL

  2. Vzdálené připojení MYSQL vyžaduje SSL

  3. Jak vypočítat tržby v MySQL

  4. Vytvoření databázové tabulky v proceduře PL/SQL