PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Die Funktion „distinct()“ (kein Qualifizierer auswählen) in Postgres

Eigentlich ist das der gewöhnliche DISTINCT-Qualifizierer auf einem SELECT -- aber mit einer irreführenden Syntax (in diesem Punkt haben Sie recht).

DISTINCT ist nie eine Funktion, immer ein Schlüsselwort. Hier wird es (fälschlicherweise) so verwendet, als wäre es eine Funktion, aber

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

ist tatsächlich äquivalent zu allen folgenden Formen:

-- Fügen Sie nach distinct ein Leerzeichen hinzu :

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

-- Entfernen Sie die Klammern um den Spaltennamen:

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

-- Inhalt der Einrückungsklauseln:

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

-- Entfernen Sie redundanten Alias, der mit dem Spaltennamen identisch ist:

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

Ergänzende Lektüre:

Hinweis:OMG Ponys in eine Antwort auf die aktuelle Frage erwähnte das DISTINCT ON Erweiterung von PostgreSQL.
Aber (wie Jay in einem Kommentar zu Recht anmerkte) ist es nicht das, was hier verwendet wird, weil die Abfrage (und die Ergebnisse) anders gewesen wäre, z. B.:

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

Äquivalent zu:

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

Ergänzende Lektüre:

Hinweis:Lukas Eder in eine Antwort auf die aktuelle Frage erwähnte die Syntax der Verwendung des Schlüsselworts DISTINCT innerhalb einer Aggregatfunktion:
der COUNT(DISTINCT (foo, bar, ...)) Syntax von HSQLDB
(oder COUNT(DISTINCT foo, bar, ...) was auch für MySQL funktioniert, aber auch für PostgreSQL, SQL Server, Oracle und vielleicht andere).
Aber (eindeutig) ist es nicht das, was hier verwendet wird.