PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

fonction distinct() (pas de qualificatif select) dans postgres

En fait, c'est c'est le qualificateur DISTINCT ordinaire sur un SELECT -- mais avec une syntaxe trompeuse (vous avez raison sur ce point).

DISTINCT n'est jamais une fonction, toujours un mot clé. Ici, il est utilisé (à tort) comme s'il s'agissait d'une fonction, mais

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

est en fait équivalent à toutes les formes suivantes :

-- ajoutez un espace après distinct :

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

-- supprimer les parenthèses autour du nom de la colonne :

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

-- contenu des clauses d'indentation :

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

-- supprimer l'alias redondant identique au nom de la colonne :

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

Lecture complémentaire :

Remarque :OMG Ponies dans une réponse à la question actuelle mentionné le DISTINCT ON extension présentée par PostgreSQL.
Mais (comme Jay l'a fait remarquer à juste titre dans un commentaire) ce n'est pas ce qui est utilisé ici, car la requête (et les résultats) auraient été différents, par exemple :

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

équivalent à :

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

Lecture complémentaire :

Remarque :Lukas Eder dans une réponse à la question actuelle a mentionné la syntaxe d'utilisation du mot-clé DISTINCT dans une fonction d'agrégat :
le COUNT(DISTINCT (foo, bar, ...)) syntaxe proposée par HSQLDB
(ou COUNT(DISTINCT foo, bar, ...) qui fonctionne aussi pour MySQL, mais aussi pour PostgreSQL, SQL Server, Oracle et peut-être d'autres).
Mais (assez clairement) ce n'est pas ce qui est utilisé ici.