Comment puis-je utiliser T-SQL Group By

voix
28

Je sais que je dois avoir (bien que je ne sais pas pourquoi) une GROUP BYclause sur la fin d'une requête SQL qui utilise des fonctions d' agrégation comme count, sum, avg, etc:

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

Quand d' autre serait GROUP BYêtre utile, et quelles sont les ramifications de performance?

Créé 05/08/2008 à 19:55
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
30

Pour récupérer le nombre de widgets de chaque catégorie widget qui a plus de 5 widgets, vous pouvez le faire:

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

Le « ayant » l'article est quelque chose les gens oublient souvent, au lieu d'opter pour récupérer toutes leurs données au client et itérer là.

Créé 05/08/2008 à 20:32
source utilisateur

voix
13

GROUP BY est similaire à DISTINCT qu'il regroupe plusieurs enregistrements en un seul.

Cet exemple, emprunté à http://www.devguru.com/technologies/t-sql/7080.asp , une liste de produits distincts dans le tableau des produits.

SELECT Product FROM Products GROUP BY Product

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

L'avantage de GROUP BY sur 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
Créé 19/08/2008 à 15:02
source utilisateur

voix
3

Groupe par l'ensemble des forces ensemble à être rempli avant que les dossiers sont renvoyés (car il est une sorte implicite).

Pour cette raison (et bien d'autres), ne jamais utiliser un par groupe dans un sous-requête.

Créé 05/08/2008 à 20:01
source utilisateur

voix
2

Compter le nombre de fois tags sont utilisés pourrait être un exemple google:

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

Si vous voulez simplement une valeur distincte des balises, je préférerais utiliser la DISTINCTdéclaration.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Créé 05/08/2008 à 19:58
source utilisateur

voix
0

GROUP BY aide également lorsque vous souhaitez générer un rapport qui sera moyenne ou la somme d'un tas de données. Vous pouvez regrouper par le numéro de service et la somme de toutes les recettes des ventes ou AVG le nombre de ventes pour chaque mois.

Créé 05/08/2008 à 20:00
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more