2010-02-04 3 views
20

Je suis (en profondeur) en train d'apprendre le SQL et j'ai rencontré la clause GROUP BY.Une raison quelconque pour la clause GROUP BY sans fonction d'agrégation?

GROUP BY agrège ou regroupe le jeu de résultats en fonction du ou des arguments que vous lui donnez. Si vous utilisez cette clause dans une requête, vous pouvez alors effectuer des fonctions d'agrégation sur le jeu de résultats pour trouver des informations statistiques sur le jeu de résultats, par exemple trouver des moyennes (AVG()) ou la fréquence (COUNT()).

Ma question est la suivante: l'instruction GROUP BY est-elle utile sans fonction d'agrégation?

Mise à jour En utilisant GROUP BY comme synonyme de DISTINCT est (probablement) une mauvaise idée parce que je pense qu'il est plus lent.

Répondre

13

l'instruction GROUP BY est-elle utile de quelque façon que ce soit sans fonction d'agrégation associée?

L'utilisation DISTINCT serait synonyme dans une telle situation, mais la raison pour laquelle vous voulez/devez définir une clause GROUP BY serait afin de pouvoir définir les détails de HAVING clause.

Si vous devez définir une clause HAVING, vous avez pour définir un GROUP BY - vous ne pouvez pas le faire en collaboration avec DISTINCT.

+1

Donc, votre réponse est "non", non? –

+0

@Niels: Dépend des données et du modèle de données, mais IME Je n'ai jamais eu le besoin dont je me souviens –

6

Vous pouvez effectuer une sélection DISTINCT en utilisant un groupe PAR sans AGGREGATES.

-2

Il est utilisé pour plus que des fonctions d'agrégation.

Par exemple, considérons le code suivant:

SELECT product_name, MAX('last_purchased') FROM products GROUP BY product_name 

Ceci renvoie 1 résultat par produit, mais avec la dernière valeur mise à jour que les dossiers.

+3

'MAX()' est une fonction d'agrégation. –

+0

@am: Neils pose des questions sur les utilisations sans la fonction Aggregate –

+0

Il ne regroupe pas, il sélectionne une seule valeur dans une liste. _Un agrégat est une collection d'éléments qui sont rassemblés pour former une quantité totale_ – Amirshk

6

Groupe par peut être utilisé dans Deux voies Majorly
1) conjointement avec des fonctions d'agrégation SQL
2) pour éliminer lignes en double d'un jeu de résultats

répondre SO à vos mensonges question dans la deuxième partie des USEs décrites ci-dessus.

1

Note: tout ci-dessous applique uniquement aux MySQL

GROUP BY est guaranteed pour retourner des résultats dans l'ordre, DISTINCT n'est pas.

GROUP BY ainsi que ORDER BY NULL est de la même efficacité que DISTINCT (et mis en œuvre dans le sens indiqué).S'il existe un index sur le champ agrégé (ou distinct), les deux clauses utilisent un scan d'index libre sur ce champ. En GROUP BY, vous pouvez renvoyer des expressions non groupées et non agrégées. MySQL choisira toutes les valeurs aléatoires à partir du groupe correspondant pour calculer l'expression. Avec GROUP BY, vous pouvez omettre les expressions GROUP BY de la clause SELECT.Avec DISTINCT, vous ne pouvez pas. Chaque ligne retournée par un DISTINCT est garantie d'être unique.