PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres:Distinto ma solo per una colonna

Per fare un distinto su una sola (o n) colonne:

select distinct on (name)
    name, col1, col2
from names

Ciò restituirà una qualsiasi delle righe contenenti il ​​nome. Se vuoi controllare quale delle righe verrà restituita devi ordinare:

select distinct on (name)
    name, col1, col2
from names
order by name, col1

Restituirà la prima riga se ordinata da col1.

distinct on :

SELECT DISTINCT ON ( expression [, ...] ) mantiene solo la prima riga di ogni set di righe in cui le espressioni date restituiscono uguali. Le espressioni DISTINCT ON vengono interpretate utilizzando le stesse regole di ORDER BY (vedi sopra). Tieni presente che la "prima riga" di ogni set è imprevedibile a meno che non venga utilizzato ORDER BY per garantire che la riga desiderata appaia per prima.

Le espressioni DISTINCT ON devono corrispondere alle espressioni ORDER BY più a sinistra. La clausola ORDER BY normalmente conterrà espressioni aggiuntive che determinano la precedenza desiderata delle righe all'interno di ciascun gruppo DISTINCT ON.