Qual é a diferença entre GROUP BY e DISTINCT?
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?
Solução
DISTINCT
referem-se a registros distintos como um todo, os campos não distintos no registro.
Outras dicas
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