2008-08-05 6 views
26

Ich weiß, ich brauche (obwohl ich nicht weiß, warum) eine GROUP BY-Klausel am Ende einer SQL-Abfrage, die Aggregatfunktionen wie count, sum, avg, etc verwendet :Wie verwende ich T-SQL-Gruppe Von

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

Wann würden sonst GROUP BY nützlich sein, und was die Leistung Verzweigungen sind?

+0

Beachten Sie, dass GROUP BY die Ergebnismenge nicht anordnet. Wenn Sie eine bestimmte Reihenfolge benötigen, dann fügen Sie ORDER BY zu –

Antwort

28

Um die Anzahl der Widgets jedes Widget Kategorie abrufen, die mehr als 5 Widgets hat, können Sie dies tun:

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

Die „mit“ Klausel über etwas, das Menschen oft vergessen ist, sondern alle abzurufen entscheiden ihre Daten an den Client und durchläuft sie dort.

1

Zählen die Anzahl der Tags verwendet werden könnte ein Google Beispiel sein:

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

Wenn Sie einfach einen eindeutigen Wert von Tags wollen, würde ich es vorziehen, die DISTINCT Anweisung zu verwenden.

SELECT DISTINCT TagName 
FROM Tags 
ORDER BY TagName ASC 
0

GROUP BY hilft auch, wenn Sie einen Bericht erstellen möchten, der eine Reihe von Daten mittelt oder summiert. Sie können über die Abteilungs ID und die SUM allen Umsatz oder AVG die Anzahl der Verkäufe für jeden Monat gruppieren.

1

Group By erzwingt, dass die gesamte Menge gefüllt wird, bevor Datensätze zurückgegeben werden (da es sich um eine implizite Sortierung handelt).

Aus diesem Grund (und viele andere), nie eine Gruppe von in einer Unterabfrage verwenden.

12

GROUP BY ähnelt DISTINCT insofern, als es mehrere Datensätze zu einem zusammenfasst.

Dieses Beispiel, entliehen von http://www.devguru.com/technologies/t-sql/7080.asp, listet verschiedene Produkte in der Produkttabelle auf.

SELECT Product FROM Products GROUP BY Product 

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

Der Vorteil der GROUP BY über DISTINCT ist, dass es Ihnen eine granulare Kontrolle, wenn sie mit einer HAVING-Klausel verwendet, geben kann.

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 
+1

sehr wunderbar einfaches Beispiel ist es ein +1 – user96403