Wie verwende ich T-SQL Group By

stimmen
28

Ich weiß , ich habe müssen (obwohl ich weiß nicht , warum) eine GROUP BYKlausel über das Ende einer SQL - Abfrage , die keine Aggregatfunktionen verwendet , wie count, sum, avg, etc:

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

Wenn sonst würde GROUP BYnützlich sein, und was sind die Leistung Auswirkungen?

Veröffentlicht am 05/08/2008 um 19:55
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
30

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 ist oft etwas, das Menschen vergessen, sondern entscheiden sich ihre Daten alle an den Client abrufen und dort durchlaufen.

Beantwortet am 05/08/2008 um 20:32
quelle vom benutzer

stimmen
13

GROUP BY ähnelt DISTINCT, dass es Gruppen mehrere Datensätze in einem.

Dieses Beispiel aus geliehenen http://www.devguru.com/technologies/t-sql/7080.asp , listet verschiedene Produkte in der Tabelle Products.

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 granulare Kontrolle geben kann, wenn sie mit einer HAVING-Klausel verwendet.

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
Beantwortet am 19/08/2008 um 15:02
quelle vom benutzer

stimmen
3

Gruppe von Kräften der gesamte Satz gefüllt werden, bevor Datensätze zurückgegeben werden (da es ein impliziter sort ist).

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

Beantwortet am 05/08/2008 um 20:01
quelle vom benutzer

stimmen
2

Zählen der Anzahl der Male-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 verwenden DISTINCTAussage.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Beantwortet am 05/08/2008 um 19:58
quelle vom benutzer

stimmen
0

GROUP BY hilft auch, wenn Sie einen Bericht erstellen möchten, die ein Bündel von Daten werden im Durchschnitt oder summieren. Sie können GROUP Durch die Abteilungs-ID und die Summe all der Umsatzerlöse oder AVG die Anzahl der Verkäufe für jeden Monat.

Beantwortet am 05/08/2008 um 20:00
quelle vom benutzer

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