Qual è la differenza tra GROUP BY e DISTINCT?
Domanda
Ho la tabella con i dati seguenti
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
Ho usato le seguenti query:
select deptid, EMPID ,EMPNAME ,ADDRESS
from mytable
group by 1,2,3,4
che dà il risultato:
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 per la query:
select distinct (deptid),EMPID,EMPNAME,ADDRESS
from mytable
Il set di risultati è:
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
Nella seconda query anche se ho dato DISTINCT
per deptid, come mai ho ottenuto il duplicato deptid ...
Ci può spiegare questo?
Soluzione
DISTINCT
si riferiscono a record distinti nel suo insieme, i campi non distinti nel record.
Altri suggerimenti
DISTINCT
funziona solo su l'intera riga. Non fatevi trarre in inganno a pensare SELECT DISTINCT(A), B
fa qualcosa di diverso. Ciò equivale a SELECT DISTINCT A, B
Mentre gruppo da tutte le colonne e distinto vi darà gli stessi risultati in Teradata, hanno diversi algoritmi dietro le quinte e si generalmente ottenere prestazioni migliori da utilizzare per gruppo di usare i distinti. Credo che c'erano piani per avere sia implementata nello stesso modo, ma sono ancora diversi nella versione che sto utilizzando (V2R6) e non ho provato su Teradata 12 ancora.
Raggruppa e distinto sia funzionerà lo stesso. Confrontando Distinct per gruppo dà buone prestazioni poiché elabora meno righe e occupa meno memoria spool
distinta non funziona bene con multi colonna. se somministrato distinti su un'unica colonna ma dà la combinazione unica di colonne specificato.
Quindi, gruppo dalle dà i record univoci e può fare aggregati troppo.
Non so come spiegare la differenza, ma ti do gli esempi _with_queries_ attraverso questo si può capire meglio la differenza tra GROUP BY
e DISTINCT
.
Domanda: Quante persone sono in ogni stato unico nella tabella clienti
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 fare il vostro tavolo e controllare il risultato