CodeGym /Kurse /SQL SELF /Durchschnittswerte mit AVG() — Durchschnitt...

Durchschnittswerte mit AVG() — Durchschnittswerte für Spalten berechnen

SQL SELF
Level 7 , Lektion 3
Verfügbar

Wenn du jemals versucht hast, eine Durchschnittsnote für Prüfungen oder zum Beispiel das durchschnittliche Gehalt in einer Abteilung zu berechnen, kennst du das Konzept des arithmetischen Mittels schon. Das lernt man ja meistens schon in der Schule. In SQL löst du jede Aufgabe, die mit der Berechnung eines Durchschnittswerts in einem Datensatz zu tun hat, mit der Funktion AVG().

Die Funktion AVG() ist eine Aggregatfunktion, die das arithmetische Mittel für eine numerische Spalte berechnet. Sie summiert alle Werte in der angegebenen Spalte und teilt das Ergebnis durch die Anzahl dieser Werte. Sie ignoriert NULL (und dieses Ignorieren macht das Leben tatsächlich einfacher, aber dazu später mehr).

Syntax von AVG()

Lass uns mit der grundlegenden Syntax starten:

SELECT AVG(spalte)
FROM tabelle;

Wichtig: Hier ist spalte die Spalte mit den numerischen Werten, für die du den Durchschnitt berechnen willst.

Beispiel 1: Durchschnittsgehalt der Mitarbeiter

Stell dir vor, wir haben eine Tabelle employees, in der die Daten der Mitarbeiter und ihre Gehälter gespeichert sind:

id name salary
1 Otto 50000
2 Maria 60000
3 Alex 55000
4 Anna NULL
5 Dan 52000

Ein einfacher Query, um das Durchschnittsgehalt zu berechnen:

SELECT AVG(salary) AS average_salary
FROM employees;

Ergebnis:

average_salary
54250

Wie funktioniert das?

  • AVG() summiert alle Gehälter: 50000 + 60000 + 55000 + 52000 = 217000.
  • Teilt die Summe durch die Anzahl der nicht-NULL Werte: 217000 / 4 = 54250.

Besonderheiten von AVG() mit NULL

Du hast vielleicht bemerkt, dass für die Durchschnittsberechnung der Wert NULL in der Spalte salary ignoriert wurde. Das ist ein zentrales Feature von AVG(). Sie berücksichtigt nur nicht-NULL Werte.

Probieren wir ein Beispiel:

SELECT AVG(NULL) AS ergebnis;

Ergebnis:

ergebnis
NULL

Das bestätigt nochmal, dass AVG() NULL ignoriert. Wenn aber der ganze Datensatz nur aus NULL besteht, ist das Ergebnis NULL.

Wenn in der Tabelle aber statt NULL eine 0 steht, wird dieses Ergebnis nicht ignoriert.

Tabelle employees

id salary
1 1000
2 0
3 NULL
4 2000

SQL-Query:

SELECT AVG(salary) AS avg_salary
FROM employees;

Ergebnis:

avg_salary
1000

Warum ist das so?

Weil AVG() folgendes berechnet:

[(1000 + 0 + 2000) / 3 = 1000]

Die Zeile mit NULL wird beim Durchschnitt ignoriert.

Beispiel: Durchschnittsalter der Studenten berechnen

Jetzt schauen wir uns die Tabelle students an:

id name age
1 Anna 20
2 Max 22
3 Maria NULL
4 Otto 21

Query:

SELECT AVG(age) AS average_age
FROM students;

Ergebnis:

average_age
21
  • AVG() ignoriert die Studentin Maria, weil ihr Alter als NULL angegeben ist.
  • Der Durchschnitt wird so berechnet: (20 + 22 + 21) / 3 = 21.

Runden des Ergebnisses

Manchmal gibt AVG() ein Dezimalergebnis mit mehreren Nachkommastellen zurück.

Wenn du eine gerundete Zahl brauchst, kannst du die Funktion ROUND() verwenden.

Tabelle employees

id salary
1 50000
2 60000
3 47000
4 NULL

SQL-Query

SELECT ROUND(AVG(salary), 2) AS rounded_average_salary
FROM employees;

Ergebnis

rounded_average_salary
52333.33

Die Zeile mit NULL wird beim Berechnen ausgeschlossen, also wird der Durchschnitt aus drei Werten berechnet.

Daten filtern vor der AVG()-Berechnung

Wenn du den Durchschnitt nur für Werte berechnen willst, die bestimmten Bedingungen entsprechen, nutze WHERE.

Tabelle employees

id salary
1 50000
2 60000
3 47000
4 60000
5 NULL

Beispiel: Finde das Durchschnittsgehalt der Mitarbeiter, deren id > 2 ist.

SELECT AVG(salary) AS average_salary
FROM employees
WHERE id > 2;

Ergebnis

average_salary
53500

In die Berechnung gehen nur die Gehälter mit id = 3 und id = 4 ein. Die Zeile mit NULL wird ausgeschlossen.

Beispiel: Komplexe Queries mit AVG()

Du kannst die Funktion AVG() auch mit anderen Aggregatfunktionen und Operatoren kombinieren.

Angenommen, wir haben eine Verkaufstabelle sales:

sale_id product quantity price
1 Telefon 2 500
2 Laptop 1 1500
3 Tablet 3 300

Query zur Berechnung des durchschnittlichen Gesamtverkaufsbetrags:

SELECT AVG(quantity * price) AS average_total_sale
FROM sales;

Ergebnis:

averagetotalsale
950

Praxistipps und typische Fehler

Mit AVG() solltest du vorsichtig sein, um typische Fehler zu vermeiden:

NULL-Werte: Manchmal wundert man sich, warum das Ergebnis kleiner als erwartet ist. Denk dran, dass AVG() Zeilen mit NULL überspringt.

Gemischte Datentypen: Wenn in der Spalte Zahlen und Text gemischt sind (was sowieso schlechte Praxis ist), gibt AVG() einen Fehler aus.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION