Frage

Ich weiß, dass ich eins haben muss (obwohl ich nicht weiß, warum). GROUP BY -Klausel am Ende einer SQL-Abfrage, die Aggregatfunktionen wie verwendet count, sum, avg, usw:

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

Wann sonst GROUP BY nützlich sein und was sind die Auswirkungen auf die Leistung?

War es hilfreich?

Lösung

Um die Anzahl der Widgets aus jeder Widget-Kategorie abzurufen, die mehr als 5 Widgets enthält, können Sie Folgendes tun:

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

Die „Having“-Klausel wird oft vergessen und stattdessen alle Daten zum Client abgerufen und dort iteriert.

Andere Tipps

GROUP BY ähnelt DISTINCT darin, dass es mehrere Datensätze zu einem gruppiert.

Dieses Beispiel, entlehnt von http://www.devguru.com/technologies/t-sql/7080.asp, listet verschiedene Produkte in der Tabelle „Produkte“ 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

„Gruppieren nach“ erzwingt, dass der gesamte Satz aufgefüllt wird, bevor Datensätze zurückgegeben werden (da es sich um eine implizite Sortierung handelt).

Aus diesem (und vielen anderen) Gründen sollten Sie niemals „Gruppieren nach“ in einer Unterabfrage verwenden.

Das Zählen, wie oft Tags verwendet werden, könnte ein Google-Beispiel sein:

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

Wenn Sie einfach nur einen eindeutigen Wert für Tags wünschen, würde ich die Verwendung bevorzugen DISTINCT Stellungnahme.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC

GROUP BY hilft auch, wenn Sie einen Bericht erstellen möchten, der eine Reihe von Daten mittelt oder summiert.Sie können alle Verkaufserlöse nach der Abteilungs-ID und der SUMME GRUPPIEREN oder die Anzahl der Verkäufe für jeden Monat als AVG ermitteln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top