sql >> Base de Datos >  >> RDS >> PostgreSQL

función distintiva () (no seleccionar calificador) en postgres

En realidad esto es el calificador DISTINCT ordinario en un SELECT, pero con una sintaxis engañosa (tienes razón en ese punto).

DISTINCT nunca es una función, siempre una palabra clave. Aquí se usa (mal) como si fuera una función, pero

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

es de hecho equivalente a todas las formas siguientes:

-- agregue un espacio después de distinct :

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

-- elimine los paréntesis alrededor del nombre de la columna:

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

-- sangrar el contenido de las cláusulas:

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

-- eliminar el alias redundante idéntico al nombre de la columna:

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

Lectura complementaria:

Nota:OMG Ponies en una respuesta a la presente pregunta mencionó el DISTINCT ON extensión presentada por PostgreSQL.
Pero (como Jay señaló correctamente en un comentario) no es lo que se usa aquí, porque la consulta (y los resultados) habrían sido diferentes, por ejemplo:

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 ...

Lectura complementaria:

Nota:Lukas Eder en una respuesta a la presente pregunta mencionó la sintaxis de usar la palabra clave DISTINCT dentro de una función agregada:
the COUNT(DISTINCT (foo, bar, ...)) sintaxis presentada por HSQLDB
(o COUNT(DISTINCT foo, bar, ...) que también funciona para MySQL, pero también para PostgreSQL, SQL Server, Oracle y tal vez otros).
Pero (claramente) no es lo que se usa aquí.