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?

È stato utile?

Soluzione

DISTINCT si riferiscono a record distinti nel suo insieme, i campi non distinti nel record.

Altri suggerimenti

DISTINCT elimina le righe si ripetono. GROUP BY gruppi record univoci, e consente di eseguire aggregata funzioni.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top