Quelle est la différence entre GROUP BY et DISTINCT?
Question
J'ai la table avec les données suivantes
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
Je l'ai utilisé les requêtes suivantes:
select deptid, EMPID ,EMPNAME ,ADDRESS
from mytable
group by 1,2,3,4
Ce qui donne le résultat:
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
Et pour la requête:
select distinct (deptid),EMPID,EMPNAME,ADDRESS
from mytable
Le jeu de résultats est:
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
Dans la deuxième requête si j'ai donné DISTINCT
pour deptID, comment se fait que je suis le double deptID ...
Pouvez-vous expliquer cela?
La solution
DISTINCT
se réfèrent à des documents distincts dans son ensemble, les champs non distincts dans le dossier.
Autres conseils
DISTINCT
élimine les lignes de répétition. GROUP BY
groupes des enregistrements uniques, et vous permet d'effectuer des agrégats fonctions.
DISTINCT
ne fonctionne que sur toute la ligne. Ne vous laissez pas induire en erreur en pensant SELECT DISTINCT(A), B
ne quelque chose de différent. Cela équivaut à SELECT DISTINCT A, B
Alors que le groupe de toutes les colonnes et distinctes vous donnera les mêmes résultats dans Teradata, ils ont des algorithmes dans les coulisses et vous généralement obtenir de meilleures performances de l'utilisation par le groupe que d'utiliser distinct. Je crois qu'il y avait des plans pour avoir mis en œuvre à la fois de la même manière, mais ils sont toujours différents dans la version que je utilise (V2R6) et je ne l'ai pas essayé sur Teradata 12 encore.
Par groupe et DISTINCTES fonctionnera même. En comparaison avec par Distinct Group donne de bonnes performances car il traite moins de lignes et occupe moins de mémoire spool
Distinct ne fonctionne pas très bien avec plusieurs colonnes. mais étant donné distinctes sur une seule colonne, mais il donne la combinaison unique de colonnes spécifiées.
Ainsi, le Groupe en donne les enregistrements uniques et peut faire des agrégats aussi.
Je ne sais pas comment expliquer la différence, mais je vous donne les exemples _with_queries_ grâce à cela, vous pouvez mieux comprendre la différence entre GROUP BY
et DISTINCT
.
Question: Combien de personnes sont dans chaque État unique dans la table des clients
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**
Il suffit de faire votre propre table et vérifier le résultat