AVG()
Aggregatfunktionen
AVG() berechnet den arithmetischen Durchschnitt einer numerischen Spalte – also Summe geteilt durch Anzahl der Werte. Typische Fragen: „Wie hoch ist der durchschnittliche Produktpreis?“ oder „Wie viel setzt ein Kunde im Schnitt um?“.
Syntax
SELECT AVG(Spalte) FROM Tabelle;
Beispiel: Durchschnittlicher Preis
SELECT AVG(Preis) AS Schnittpreis FROM Produkte;
| Schnittpreis |
|---|
| 59.00 |
Beispiel: Durchschnitt pro Gruppe
Mit GROUP BY erhältst du den Durchschnitt je Kategorie:
SELECT Kategorie, AVG(Preis) AS Schnitt FROM Produkte GROUP BY Kategorie;
| Kategorie | Schnitt |
|---|---|
| Büro | 17.50 |
| Technik | 72.50 |
Stolperfalle: NULL verfälscht den Schnitt
AVG() ignoriert NULL-Werte – es teilt also nur durch die Anzahl der vorhandenen Werte, nicht durch alle Zeilen. Hat ein Produkt z. B. keinen Preis (NULL), fließt es weder in Summe noch in den Teiler ein. Sollen fehlende Werte stattdessen als 0 in den Durchschnitt eingehen, musst du sie vorher ersetzen:
SELECT AVG(COALESCE(Preis, 0)) AS SchnittMitNull FROM Produkte;
Stolperfalle: Ganzzahl-Division
Ist die Spalte ganzzahlig (Integer), runden manche Systeme – vor allem SQL Server – das Ergebnis ab! AVG() über die Werte 1, 2 und 2 ergibt dort 1 statt 1.67. Caste vorher auf einen Kommatyp, um genaue Werte zu erhalten:
SELECT AVG(CAST(Menge AS DECIMAL(10,2))) AS SchnittMenge FROM Bestellungen;
In MySQL und PostgreSQL liefert AVG() dagegen von Haus aus einen Dezimalwert.
Wie verhält sich AVG() gegenüber NULL-Werten in der Spalte?