9
votes

Quelle est la différence entre le groupe, distinct, union pour la sélection de valeurs distinctes pour plusieurs colonnes?

Cette question a expliqué sur une manière d'obtenir une combinaison distincte de Plusieurs colonnes. Mais je veux connaître la différence entre les méthodes de distincte, union, groupe par la méthode des mots clés à cette fin. Je reçois des résultats différents lorsque vous les utilisez. Mes questions sont comme ça Requête 1.

xxx

requête 2.

xxx

requête 3. < / p>

xxx

Je reçois un nombre différent de lignes pour les requêtes ci-dessus (modifier: les deux premiers donnent un nombre égal de lignes mais la dernière donne à la différence) . Quelqu'un peut-il expliquer ce que font les requêtes ci-dessus? Surtout le troisième?

EDIT: Notez que je fais un syndicat sur la même table. Dans ce cas, que se passera-t-il?


0 commentaires

4 Réponses :


1
votes

suppose que ceci est votre DB Data: xxx pré>

première requête h3>

Dans le premier exemple, vous obtiendrez toutes les combinaisons de colonnes à partir du groupe DB (comme Par 1,2,3 code> ne fait rien), y compris des doublons, il retournera donc: p>

1
2
3


3 commentaires

Dans certains dialectes de groupe SQL par 1, 2, 3 signifie "groupe par la première, deuxième et troisième colonne" et serait donc équivalente à la deuxième requête


Merci. Mais que se passera-t-il si vous faites union sur la même table ?. Groupe de 1,2,3 signifie groupe par colonne1, colonne2, colonne3 dans Teradata SQL. La première et la deuxième requête revient donc.


Le groupe de 1,2,3 est spécifique à certains dialectes SQL. Certains peuvent grouper en première, deuxième et troisième colonne, d'autres peuvent l'ignorer. Union sur la même table combinera les valeurs des trois colonnes en une colonne pouvant être filtrée ultérieurement. Je pense que ces champs peuvent devoir être du même type / similaire. Je ne sais pas si vous pouvez faire une union d'Int et de champs de texte.



10
votes

À partir de ce que je pense, c'est le plus simple, distinct, c'est vraiment ça. Il renvoie les combinaisons distinctes des rangées. Pensez à ce jeu de données: xxx

Cela reviendra 3 rangs car la 4ème ligne de l'ensemble de données correspond exactement à la première ligne. Résultat: xxx

Le groupe par est fréquemment utilisé pour les résumés et autres calculs Sélectionnez Col1, Somme (Col2) de la table groupe par colonne1;

pour ce jeu de données: xxx

retournerait xxx

Un syndicat juste Prend des résultats de différentes requêtes et les présente comme un ensemble de résultats: xxx

Set de résultats: xxx

lors de l'exécution d'un syndicat , les types de données de colonne doivent correspondre. Vous ne pouvez pas l'ynoncer une colonne Numéro avec une colonne Char (sauf si vous effectuez explicitement une conversion de données)


3 commentaires

Merci. En fait, je suis confus sur l'union sur la même table deux fois dans la table. Comment le jeu de résultats obtiendra-t-il lorsque nous ferons un syndicat sur la même table?


Dans votre exemple, vous étiez un syndicat de différentes colonnes. Donc, vous êtes en vigueur, prenez des données à base de lignes et la présentant comme une colonne basée sur une colonne. Si vous aviez une table avec 4 colonnes de texte et une ligne de données, vous avez sélectionné chaque colonne à l'aide des syndicats, votre jeu de résultats serait de 1 colonne avec 4 lignes de données.


Un point important à noter est qu'une syndicale se défaçons des duplicats, tandis qu'un syndicat conserve tous des doublons - sqlfiddle.com / #! 3 / 83D93 / 1



0
votes

Si vous incluez "plan d'exécution réelle" (Control + m dans MS SQL Management Studio), il vous donnera un diagramme de la manière dont le moteur SQL optimise chacune de vos déclarations. Comprendre cela vous aidera à écrire de meilleures questions.


1 commentaires

Eh bien .. j'ai demandé en général SQL. Mais mon problème est dans Teradata SQL.



1
votes

permet d'aller avec un exemple d'ensemble de données xxx pré>

distinct renvoie essentiellement une seule instance d'un enregistrement donné sans doublons de l'ensemble des colonnes dans le jeu de résultats. Ex: "Sélectionner un client distinct à partir de commandes" retournerait "A", "B", "B", "C" fait défaut dans l'ordre alpha des colonnes choisies. P>

groupe par est de faire des agrégations dans un ensemble donné des champs dans une requête. Ex: p>

Sélectionnez le client, comptez (*) en tant que numéros préférés du groupe de commandes par 1 p> xxx pré>

Vous pouvez également appliquer distinct (une seule fois) dans un Requête, mais dans un groupe donné .. p>

Sélectionnez le client, comptez (*) en tant que numéros préférés, comptez (distinct {mois de commanddate}) en tant que CustomerMonths du groupe de commandes par le client P>

Would result with
A    3    1  (all orders were in August)
B    2    2  (had orders in July and August)
C    1    1  (only one order in August)


2 commentaires

Merci beaucoup. Votre explication du groupe par est fantastique. Les 3 derniers parass de votre réponse ont été très utiles. Mais que se passera-t-il lorsque vous faites un syndicat sur la même table? Aussi "groupe de 1,2,3" et "distinct" donneront les mêmes résultats. Merci


Je ne sais pas ... jamais eu d'instance pour avoir besoin de cela ... Cependant, ce que vous pouvez faire est une seconde sélection basée sur le résultat de la première utilisation du même groupe de "Roll-up" des éléments communs provenant du Tableau de seconde instance.