Antonio,

Após a lista de seleção ser processada, a tabela resultante pode
opcionalmente estar sujeita à remoção das linhas duplicadas. A palavra
chave DISTINCT deve ser escrita logo após o SELECT para especificar
esta funcionalidade:  SELECT DISTINCT lista_de_seleção ...

(Em vez de DISTINCT pode ser utilizada a palavra ALL para especificar
o comportamento padrão de manter todas as linhas)
Como é óbvio, duas linhas são consideradas distintas quando têm pelo
menos uma coluna diferente. Os valores nulos são considerados iguais
nesta comparação.

Como alternativa, uma expressão arbitrária pode determinar quais
linhas devem ser consideradas distintas: SELECT DISTINCT ON (expressão
[, expressão ...]) lista_de_seleção ...

Neste caso, expressão é uma expressão de valor arbitrária avaliada
para todas as linhas. Um conjunto de linhas para as quais todas as
expressões são iguais são consideradas duplicadas, e somente a
primeira linha do conjunto é mantida na saída. Deve ser observado que
a “primeira linha” de um conjunto é imprevisível, a não ser que a
consulta seja ordenada por um número suficiente de colunas para
garantir a ordem única das linhas que chegam no filtro DISTINCT (o
processamento de DISTINCT ON ocorre após a ordenação do ORDER BY).

A cláusula DISTINCT ON não faz parte do padrão SQL, sendo algumas
vezes considerada um estilo ruim devido à natureza potencialmente
indeterminada de seus resultados. Utilizando-se adequadamente GROUP BY
e subconsultas no FROM esta construção pode ser evitada, mas
geralmente é a alternativa mais fácil.

O group by serve para agrupar os resultados de uma consulta de acordo
com uma coluna especificada, e só se usa group by quando se tem uma
função de agregação, alías, vc pode usar o group by sem uma função de
agregação, mas em geral não faz muito sentido. exemplo :select
matricula from aluno group by matricula;

[]´s
Victor Hugo






Em 18 de agosto de 2010 18:01, Antonio Prado
<[email protected]> escreveu:
> Em Qua, 2010-08-18 às 10:23 -0300, Marcelo Silva escreveu:
>> Em quarta-feira 18 agosto 2010, às 09:26:48, JotaComm escreveu:
>> > Não são muitos os registros, pelo que o desempenho é praticamente igual.
>>
>> Bem as vezes podemos até usar Group By no lugar de Distinct, mas as 
>> diferenças
>> são:
>>
>> Distinct foi criado para ser usado quando não se precisa fazer soma (SUM) ou
>> valores máximos ou mínimos ou media e assim por diante, partindo deste
>> princípio no seu caso o correto seria o Distinct.
>>
>> Exemplo de Distinct
>>
>> SELECT DISTINCT * FROM TABELA
>>
>> Ele irá verificar cada (ou grupo de) campo na tabela se coincide em algum
>> outro registro no result.
>>
>> Exemplo Group By
>>
>> SELECT COUNT(*), OPERADOR FROM TABELA
>> GROUP BY OPERADOR
>>
>> Neste caso eu quero agrupar os totais de cada operador, então tenho
>> obrigatoriamente que usar o Group By.
>>
>> Por isso o Distinct é mais lento que o Group By em alguns casos, porque ele
>> faz uma verificação mais ampla.
>>
>> Em resumo, Distinct e Group By são para uso diferentes, dessa forma você deve
>> analisar qual comando seria mais adequado a sua necessidade.
>>
>> Claro que existe aqueles casos que é melhor bater o prego com a sola do 
>> sapato
>> por ser mais rápido, pois até você ir na gaveta e pegar o martelo, o sapato 
>> já
>> está no seu pé. No entanto, muitas sapatadas poderão estragar seu sapato,
>> coisa que não iria acontecer com o martelo. Dessa forma veja os prós e
>> contras, se amanhã não terá que reescrever seus códigos porque não usou a
>> função certa no lugar certo :)
>
> No meu caso, agora sem dúvida, DISTINCT ON.
>
>
> Obrigado a todos pela atenção.
>
>
> Antonio.
>
>
>
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
[]´s
Victor Hugo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a