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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top