sql >> Database >  >> RDS >> PostgreSQL

distinct() functie (geen kwalificatie selecteren) in postgres

Eigenlijk is de gewone DISTINCT-kwalificatie op een SELECT -- maar met een misleidende syntaxis (je hebt gelijk op dat punt).

DISTINCT is nooit een functie, altijd een trefwoord. Hier wordt het (verkeerd) gebruikt alsof het een functie is, maar

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

is in feite gelijk aan alle volgende vormen:

-- voeg een spatie toe na distinct :

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

-- verwijder haakjes rond de kolomnaam:

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

-- inhoud inspringende clausules:

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

-- verwijder overtollige alias identiek aan kolomnaam:

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

Aanvullende lectuur:

Opmerking:OMG-pony's in een antwoord op de huidige vraag noemde de DISTINCT ON extensie aanbevolen door PostgreSQL.
Maar (zoals Jay terecht opmerkte in een opmerking) is het niet wat hier wordt gebruikt, omdat de zoekopdracht (en de resultaten) anders zou zijn geweest, bijvoorbeeld:

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

gelijk aan:

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

Aanvullende lectuur:

Opmerking:Lukas Eder in een antwoord op de huidige vraag noemde de syntaxis van het gebruik van het sleutelwoord DISTINCT in een aggregatiefunctie:
de COUNT(DISTINCT (foo, bar, ...)) syntaxis van HSQLDB
(of COUNT(DISTINCT foo, bar, ...) wat ook werkt voor MySQL, maar ook voor PostgreSQL, SQL Server, Oracle en misschien anderen).
Maar (duidelijk genoeg) het is niet wat hier wordt gebruikt.



  1. Waarom kunnen geïndexeerde weergaven geen MAX()-aggregatie hebben?

  2. Kan geen verbinding maken met externe mysql-server met behulp van unixodbc, libmyodbc

  3. Dubbele waarden elimineren op basis van slechts één kolom van de tabel

  4. Mytop – Een handig hulpmiddel voor het bewaken van MySQL/MariaDB-prestaties in Linux