Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » Daten abfragen » Aggregatfunktionen

 

Aggregatfunktionen auf gruppierte Daten anwenden

Aggregatfunktionen liefern nicht nur Informationen über eine gesamte Tabelle, sondern können auch auf Gruppen von Zeilen angewendet werden. Die GROUP BY-Klausel ordnet Zeilen in Gruppen an, und Aggregatfunktionen geben einen einzelnen Wert für jede Gruppe von Zeilen zurück.

Beispiel
♦  So listen Sie die Verkäufer und die Anzahl der Aufträge auf, die jeder von ihnen entgegengenommen hat

Eine GROUP BY-Klausel weist SQL Anywhere an, die Menge aller Zeilen zu partitionieren, die sonst zurückgegeben würden. Alle Zeilen in jeder Partition oder Gruppe haben in den benannten Spalten dieselben Werte. Es gibt für jeden eindeutigen Wert oder jede Wertemenge nur eine einzige Gruppe. In diesem Beispiel haben sämtliche Zeilen in jeder Gruppe denselben Wert für "SalesRepresentative".

Aggregatfunktionen, wie z.B. COUNT, können dann für die Zeilen in jeder Gruppe angewendet werden. Daher wird in dieser Ergebnismenge die gesamte Anzahl der Zeilen in jeder Gruppe zurückgegeben. In den Ergebnissen der Abfrage ist folglich eine Zeile für jede Verkäufer-ID enthalten. Jede Zeile enthält wiederum die Verkäufer-ID sowie die gesamte Anzahl der Bestellungen für diesen Verkäufer.

Wenn die GROUP BY-Klausel verwendet wird, hat die resultierende Tabelle eine Zeile für jede in der GROUP BY-Klausel aufgeführte Spalte oder Spaltengruppe. Weitere Hinweise finden Sie unter Die GROUP BY-Klausel: Abfrageergebnisse in Gruppen organisieren.

Ein häufiger Fehler bei GROUP BY

Ein häufiger Fehler im Zusammenhang mit GROUP BY besteht darin, dass versucht wird, Informationen abzufragen, die nicht korrekt in einer Gruppe zusammengefasst werden können. Folgende Abfrage erzeugt z.B. eine Fehlermeldung.

SELECT SalesRepresentative, Surname, COUNT( * )
   FROM SalesOrders KEY JOIN Employees
   GROUP BY SalesRepresentative;

Der Fehler Funktion oder Spaltenreferenz auf 'Surname' muss auch in einer GROUP BY-Klausel erscheinen wird gemeldet, da SQL Anywhere nicht sicher sein kann, dass alle Ergebniszeilen für einen Mitarbeiter mit einer bestimmten ID den gleichen Nachnamen enthalten.

Diesen Fehler können Sie vermeiden, indem Sie die Spalte in die GROUP BY-Klausel miteinbeziehen.

SELECT SalesRepresentative, Surname, COUNT( * )
   FROM SalesOrders KEY JOIN Employees
   GROUP BY SalesRepresentative, Surname
   ORDER BY SalesRepresentative;

Wenn dies nicht geeignet ist, können Sie stattdessen eine Aggregatfunktion verwenden, um nur einen einzigen Wert auszuwählen:

SELECT SalesRepresentative, MAX( Surname ), COUNT( * )
   FROM SalesOrders KEY JOIN Employees
   GROUP BY SalesRepresentative
   ORDER BY SalesRepresentative;

Die Funktion MAX wählt den höchsten (den alphabetisch letzten) Nachnamen aus den Detailzeilen für jede Gruppe. Diese Anweisung ist gültig, da es nur einen eindeutigen Maximalwert geben kann. In diesem Fall wird der Nachname in jeder Detailzeile innerhalb einer Gruppe angezeigt.