sql server - Comment utiliser T

Translate

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

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

Quand d'autre seraitGROUP BYêtre utile, et quelles en sont les ramifications sur les performances?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Pour récupérer le nombre de widgets de chaque catégorie de widgets contenant plus de 5 widgets, vous pouvez faire ceci:

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

La clause «ayant» est quelque chose que les gens oublient souvent, optant plutôt pour récupérer toutes leurs données vers le client et les parcourir à cet endroit.

La source
Translate

GROUP BY est similaire à DISTINCT en ce qu'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, c'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
La source
Stu
Translate

Group By force le remplissage de l'ensemble complet avant que les enregistrements ne soient renvoyés (car 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.

La source
Translate

Compter le nombre de fois que les balises sont utilisées peut ê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 leDISTINCTdéclaration.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
La source
Translate

GROUP BY vous aide également lorsque vous souhaitez générer un rapport qui calculera la moyenne ou la somme d'un ensemble de données. Vous pouvez GROUP par l'ID de service et la somme de tous les revenus des ventes ou AVG le nombre de ventes pour chaque mois.

La source