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

distinta() (non selezionare il qualificatore) in postgres

In realtà questo è il normale qualificatore DISTINCT su un SELECT -- ma con una sintassi fuorviante (hai ragione su questo punto).

DISTINCT non è mai una funzione, sempre una parola chiave. Qui è usata (erroneamente) come se fosse una funzione, ma

select distinct(pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...

è infatti equivalente a tutte le seguenti forme:

-- aggiungi uno spazio dopo distinct :

select distinct (pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...

-- rimuovi le parentesi attorno al nome della colonna:

select distinct
    pattern as pattern, style, ... etc ...
from
    styleview
where
    ... etc ...

-- contenuto delle clausole di rientro:

select distinct
    pattern as pattern, style, ... etc ...
from
    styleview
where
    ... etc ...

-- rimuove l'alias ridondante identico al nome della colonna:

select distinct
    pattern, style, ... etc ...
from
    styleview
where
    ... etc ...

Lettura complementare:

Nota:OMG Ponies in una risposta al presente domanda menzionato il DISTINCT ON estensione presentata da PostgreSQL.
Ma (come ha giustamente osservato Jay in un commento) non è ciò che viene utilizzato qui, perché la query (e i risultati) sarebbero stati diversi, ad esempio:

select distinct on(pattern) pattern, style, ... etc ...
from styleview
where ... etc ...
order by pattern, ... etc ...

equivalente a:

select  distinct on (pattern)
    pattern, style, ... etc ...
from
    styleview
where
    ... etc ...
order by
    pattern, ... etc ...

Lettura complementare:

Nota:Lukas Eder in una risposta al presente domanda menzionato la sintassi dell'utilizzo della parola chiave DISTINCT all'interno di una funzione aggregata:
the COUNT(DISTINCT (foo, bar, ...)) sintassi presentata da HSQLDB
(o COUNT(DISTINCT foo, bar, ...) che funziona anche per MySQL, ma anche per PostgreSQL, SQL Server, Oracle e forse altri).
Ma (abbastanza chiaramente) non è quello che viene usato qui.