Pergunta

Eu tenho a tabela com os seguintes dados

empid   empname deptid   address
--------------------------------
aa76    John     6       34567
aa75    rob      4       23456
aa71    smith    3       12345
aa74    dave     2       12345
a77     blake    2       12345
aa73    andrew   3       12345
aa90    sam      1       12345
aa72    will     6       34567
aa70    rahul    5       34567

Eu usei as seguintes consultas:

select deptid, EMPID ,EMPNAME ,ADDRESS
from mytable
group by 1,2,3,4

O que dá o resultado:

deptid  empid  empname address
------------------------------
1       aa90   sam      12345
2       aa74   dave     12345
2       aa77   blake    12345
3       aa71   smith    12345
3       aa73   andrew   12345
4       aa75   rob      23456
5       aa70   rahul    34567
6       aa76   John     34567
6       aa72   will     34567

E para a consulta:

select distinct (deptid),EMPID,EMPNAME,ADDRESS
from mytable

O conjunto de resultados é:

deptid empid empname address   
----------------------------
1      aa90  sam     12345
2      aa74  dave    12345
2      aa77  blake   12345
3      aa71  smith   12345
3      aa73  andrew  12345
4      aa75  rob     23456
5      aa70  rahul   34567
6      aa72  will    34567
6      aa76  John    34567

Na segunda consulta que eu tenha dado DISTINCT para DEPTID, como é que eu tenho o duplicado DEPTID ...

Você poderia explicar isso?

Foi útil?

Solução

DISTINCT referem-se a registros distintos como um todo, os campos não distintos no registro.

Outras dicas

DISTINCT Elimina repetindo linhas. GROUP BY grupos registros exclusivos, e permite que você execute agregado funções.

DISTINCT só funciona em toda a linha. Não ser enganados em SELECT DISTINCT(A), B pensamento faz algo diferente. Isto é equivalente a SELECT DISTINCT A, B

Enquanto o grupo por todas as colunas e distinta lhe dará os mesmos resultados em Teradata, eles têm diferentes algoritmos por trás das cenas e geralmente você vai obter um melhor desempenho do uso de grupo, do que a utilização distinta. Eu acredito que havia planos para ter ambos implementados da mesma maneira, mas eles ainda são diferentes na versão que estou usando (v2r6) e eu não tentei em Teradata 12 ainda.

Group By e Distinct ambos irão trabalhar Same. Comparando com Distinct Group By Dá bom desempenho porque ele processa menos linhas e ocupa menos memória de spool

distintos não vai funcionar bem com múltiplas colunas. embora dada distinta em coluna única, mas dá a combinação única de colunas especificadas.

Então, Grupo por dá os registros exclusivos e pode fazer agregados também.

Eu não sei como explicar a diferença, mas eu dar-lhe os exemplos _with_queries_ através deste você pode entender melhor a diferença entre GROUP BY e DISTINCT.

Pergunta: Quantas pessoas estão em cada estado único na tabela de clientes

select distinct(state), count(*) from customers;

RESULT

Washington  17
----------------------------------------------------------

select State, count(*) from customers GROUP BY STATE;

RESULT

**Arizona    6
Colorado         2
Hawaii           1
Idaho            1
North Carolina   1
Oregon           2
Sourth Carolina  1
Washington   2
Wisconsin    1**

Basta fazer a sua própria mesa e verificar o resultado

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top