Aggregatfunktionen | |||||||||||||||
Aggregatfunktionen geben auf der Basis anderer Werte einen einzelnen Wert zurück. Wenn solche Funktionen unter vielen anderen Ausdrücken in der Elementliste einer SELECT-Anweisung verwendet werden, muss in dieser Anweisung eine GROUP BY-Klausel stehen. Es ist keine GROUP BY-Klausel erforderlich, wenn die Aggregatfunktion der einzige Wert ist, der von der SELECT-Anweisung abgerufen wird. Die unterstützten Aggregatfunktionen und deren Syntax finden Sie in Tabelle 4.1. |
|||||||||||||||
Aggregatfunktionen in SQL99 | |||||||||||||||
|
|||||||||||||||
Aggregatfunktionen geben auf der Basis anderer Werte einen einzelnen Wert zurück. Wenn solche Funktionen unter vielen anderen Ausdrücken in der Elementliste einer SELECT-Anweisung verwendet werden, muss in dieser Anweisung eine GROUP BY-Klausel stehen. Es ist keine GROUP BY-Klausel erforderlich, wenn die Aggregatfunktion der einzige Wert ist, der von der SELECT-Anweisung abgerufen wird. Die unterstützten Aggregatfunktionen und deren Syntax finden Sie in Tabelle 4.1. Technisch betrachtet sind auch ANY, EVERY und SOME Aggregatfunktionen. Sie werden hier aber als Bereichssuchkriterien besprochen, weil sie meistens so verwendet werden. Nähere Informationen zu diesen Funktionen finden Sie unter SELECT . . . WHERE im vorhergehenden Kapitel. Wie viele Werte eine Aggregatfunktion verarbeitet, hängt von der Anzahl der Zeilen ab, die von der Tabelle abgefragt werden. Dieses Verhalten unterscheidet Aggregatfunktionen von skalaren Funktionen, bei denen eine feste Anzahl von Parametern mit vorgegebenen Typen erforderlich ist. Die allgemeine Syntax einer Aggregatfunktion sieht so aus: aggregate_function_name ( [ALL | DISTINCT] expression ) Der Name der Aggregatfunktion kann AVG, COUNT, MAX, MIN oder SUM lauten. Die ALL-Klausel, die das Standardverhalten darstellt und nicht angegeben werden muss, wertet alle Zeilen aus, wenn der Wert der Funktion aggregiert werden soll. Mit der DISTINCT-Klausel werden bei der Auswertung nur unterschiedliche Werte verwendet. |
AVG und SUM | |
Die Funktion AVG berechnet den Durchschnitt der Werte in einer Spalte oder einem Ausdruck. SUM berechnet die Summe. Beide Funktionen arbeiten mit numerischen Werten und ignorieren NULL-Werte. Sie können auch verwendet werden, um den Durchschnitt oder die Summe aller unterschiedlichen Werte einer Spalte oder eines Ausdrucks zu berechnen. AVG und SUM werden von Microsoft SQL Server, MySQL, Oracle und PostgreSQL unterstützt. |
|
Beispiel | |
In der folgenden Abfrage werden die durchschnittlichen Verkaufszahlen für das laufende Jahr für jeden Buchtyp berechnet: |
|
SELECT type, AVG( ytd_sales ) AS "average_ytd_sales" FROM titles GROUP BY type; |
|
Die folgende Abfrage gibt die Summe der durchschnittlichen Verkaufszahlen für das laufende Jahr für jeden Buchtyp zurück: |
|
SELECT type, SUM( ytd_sales ) FROM titles GROUP BY type; |
COUNT | |
Die Funktion COUNT gibt es in drei Varianten. COUNT(*) zählt alle Zeilen in der Zieltabelle, unabhängig davon, ob darin Nullwerte enthalten sind oder nicht. COUNT(expression) zählt die Anzahl der Zeilen mit Nicht-NULL-Werten in einer bestimmten Spalte oder einem Ausdruck. COUNT(DISTINCT expression) zählt die Anzahl der verschiedenen Nicht-NULL-Werte in einer bestimmten Spalte oder einem Ausdruck. |
|
Beispiele | |
Die folgende Abfrage zählt alle Zeilen in einer Tabelle: |
|
SELECT COUNT(*) FROM publishers; |
|
Die folgende Abfrage ermittelt die Anzahl der verschiedenen Länder, in denen es Verlage gibt: |
|
SELECT COUNT(DISTINCT country) "Count of Countries" FROM publishers |
MIN und MAX | |
MIN(expression) und MAX(expression) ermitteln jeweils den kleinsten bzw. den größten Wert (String, Datum/Uhrzeit oder numerisch) in einer Menge von Zeilen. DISTINCT oder ALL können diese Funktionen ergänzen, haben aber keinerlei Auswirkung auf das Ergebnis. MIN und MAX werden von Microsoft SQL Server, MySQL, Oracle und PostgreSQL unterstützt. MySQL unterstützt auch die Funktionen LEAST( ) und GREATEST( ), die dieselbe Funktionalität haben. |
|
Beispiele | |
Mit der folgenden Abfrage werden die besten und die schlechtesten Verkaufszahlen aller gespeicherten Titel ermittelt: |
|
SELECT 'MIN' = MIN(ytd_sales), 'MAX' = MAX(ytd_sales) FROM titles; |
|
Aggregatfunktionen werden oft in der HAVING-Klausel von Abfragen mit GROUP BY verwendet. Die folgende Abfrage wählt alle Kategorien (Typen) von Büchern aus, bei denen der Durchschnittspreis aller Bücher in der Kategorie über 15 EUR liegt: |
|
SELECT type 'Category', AVG( price ) 'Average Price' FROM titles GROUP BY type HAVING AVG(price) > 15 |