PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

função distinct() (não selecione qualificador) no postgres




Na verdade, isso é o qualificador DISTINCT comum em um SELECT -- mas com uma sintaxe enganosa (você está certo sobre esse ponto).

DISTINCT nunca é uma função, sempre uma palavra-chave. Aqui é usado (erroneamente) como se fosse uma função, mas
select distinct(pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...

é de fato equivalente a todas as seguintes formas:

-- adicione um espaço após distinct :
select distinct (pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...

-- remova os parênteses ao redor do nome da coluna:
select distinct
    pattern as pattern, style, ... etc ...
from
    styleview
where
    ... etc ...

-- conteúdo das cláusulas de recuo:
select distinct
    pattern as pattern, style, ... etc ...
from
    styleview
where
    ... etc ...

-- remova o alias redundante idêntico ao nome da coluna:
select distinct
    pattern, style, ... etc ...
from
    styleview
where
    ... etc ...

Leitura complementar:

Nota:OMG Pôneis em uma resposta para o presente pergunta mencionou o DISTINCT ON extensão apresentada pelo PostgreSQL.
Mas (como Jay corretamente observou em um comentário) não é o que é usado aqui, porque a consulta (e os resultados) teriam sido diferentes, por exemplo:
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 ...

Leitura complementar:

Observação:Lukas Eder em uma resposta ao presente pergunta mencionou a sintaxe de usar a palavra-chave DISTINCT dentro de uma função agregada:
o COUNT(DISTINCT (foo, bar, ...)) sintaxe apresentada pelo HSQLDB
(ou COUNT(DISTINCT foo, bar, ...) que funciona para MySQL também, mas também para PostgreSQL, SQL Server, Oracle e talvez outros).
Mas (claramente) não é o que é usado aqui.