Question

Je sais que j'ai besoin d'avoir (même si je ne sais pas pourquoi) un GROUP BY clause à la fin d'une requête SQL qui utilise des fonctions d'agrégation telles que count, sum, avg, etc:

SELECT count(userID), userName
FROM users
GROUP BY userName

Quand d'autre le ferait GROUP BY être utile, et quelles sont les conséquences en termes de performances ?

Était-ce utile?

La solution

Pour récupérer le nombre de widgets de chaque catégorie de widgets comportant plus de 5 widgets, vous pouvez procéder comme suit :

SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5

La clause « avoir » est quelque chose que les gens oublient souvent, choisissant plutôt de récupérer toutes leurs données vers le client et de les parcourir là-bas.

Autres conseils

GROUP BY est similaire à DISTINCT dans le sens où il regroupe plusieurs enregistrements en un seul.

Cet exemple, emprunté à http://www.devguru.com/technologies/t-sql/7080.asp, répertorie les produits distincts dans le tableau Produits.

SELECT Product FROM Products GROUP BY Product

Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory

L'avantage de GROUP BY par rapport à DISTINCT est qu'il peut vous donner un contrôle granulaire lorsqu'il est utilisé avec une clause HAVING.

SELECT Product, count(Product) as ProdCnt
FROM Products
GROUP BY Product
HAVING count(Product) > 2

Product      ProdCnt
--------------------
Desktop          10
Laptop            5
Mouse             3
Network Card      9
Software          6

Group By force le remplissage de l'ensemble complet avant que les enregistrements ne soient renvoyés (puisqu'il s'agit d'un tri implicite).

Pour cette raison (et bien d’autres), n’utilisez jamais de Group By dans une sous-requête.

Compter le nombre de fois où les balises sont utilisées pourrait être un exemple de Google :

SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed

Si vous souhaitez simplement une valeur distincte de balises, je préférerais utiliser le DISTINCT déclaration.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC

GROUP BY est également utile lorsque vous souhaitez générer un rapport qui fera la moyenne ou la somme d'un ensemble de données.Vous pouvez GROUPER Par l'ID de département et la SOMME tous les revenus des ventes ou AVG le nombre de ventes pour chaque mois.

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