sql server - Wie benutze ich T.

Translate

Ich weiß, dass ich a haben muss (obwohl ich nicht weiß warum)GROUP BYKlausel am Ende einer SQL-Abfrage, die Aggregatfunktionen wie verwendetcount, sum, avg, usw:

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

Wann sonst würdeGROUP BYnützlich sein, und was sind die Auswirkungen auf die Leistung?

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

Alle Antworten

Translate

Gehen Sie folgendermaßen vor, um die Anzahl der Widgets aus jeder Widget-Kategorie mit mehr als 5 Widgets abzurufen:

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

Die "Haben" -Klausel wird häufig vergessen, stattdessen werden alle Daten auf dem Client abgerufen und dort durchlaufen.

Quelle
Translate

GROUP BY ähnelt DISTINCT darin, dass mehrere Datensätze zu einem zusammengefasst werden.

Dieses Beispiel entlehnt vonhttp://www.devguru.com/technologies/t-sql/7080.asplistet 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 von GROUP BY gegenüber DISTINCT besteht darin, dass Sie bei Verwendung mit einer HAVING-Klausel eine detaillierte Kontrolle erhalten.

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
Quelle
Stu
Translate

Gruppieren nach erzwingt das Auffüllen des gesamten Satzes, bevor Datensätze zurückgegeben werden (da es sich um eine implizite Sortierung handelt).

Verwenden Sie aus diesem Grund (und vielen anderen) niemals eine Gruppierung nach in einer Unterabfrage.

Quelle
Translate

Das Zählen der Häufigkeit, mit 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 bestimmten Wert für Tags wünschen, würde ich lieber die verwendenDISTINCTErklärung.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Quelle
Translate

GROUP BY hilft auch, wenn Sie einen Bericht erstellen möchten, der eine Datenmenge mittelt oder summiert. Sie können anhand der Abteilungs-ID und der Summe alle Umsatzerlöse oder AVG die Anzahl der Verkäufe für jeden Monat gruppieren.

Quelle