Zurück zur Artikelliste Artikel
8 Leseminuten

Die SQL-Funktion AVG() mit Beispielen erklärt

Wir erklären die SQL-Funktion AVG() anhand von praktischen Beispielen und zeigen, wo und wie Sie sie verwenden können und wo nicht.

Der Durchschnitt ist wahrscheinlich eine der am häufigsten verwendeten Metriken zur Beschreibung einiger Merkmale einer Gruppe. Er ist so vielseitig und nützlich, dass er etwas über fast alles beschreiben kann.

Wenn Sie sich für Sport interessieren, sehen Sie Dinge wie durchschnittliche Runs pro Spiel im Baseball, durchschnittliche Assists pro Spiel oder pro Saison im Basketball und so weiter. Jeden Tag hört man Aussagen wie "in dieser Stadt regnet es im Durchschnitt 10 Tage im Monat" oder "die Temperatur bleibt im Sommer durchschnittlich über 70 Grad".

In diesem Artikel werde ich die Verwendung der SQL-Funktion AVG() mit einigen Beispielen aus dem wirklichen Leben behandeln, um Ihnen zu helfen, sie in praktischen Situationen gut zu nutzen. Lesen Sie durch!

Was macht die SQL-Funktion AVG()?

Die Funktion SQL AVG() wird verwendet, um den Durchschnitt von Werten über Datensätze aus einer Tabelle zu ermitteln.

Um dies anhand eines Beispiels zu verstehen, betrachten Sie die folgende Tabelle, die Datensätze von Angestellten enthält.

employees

employeenumberlastnameskill_levelannual_salarydepartment
1056Patterson1010000Finance
1076Firrelli10NULLMarketing
1088Patterson6012500Finance
1102Bondur2110000Human Resources
1143Bow105000Sales
1165Jennings105000Sales
1166Thompson1010000Marketing

Beispiel 1

Angenommen, Sie möchten die durchschnittliche Qualifikation der Angestellten ermitteln. Sie können die SQL-Funktion AVG() verwenden. Hier ist die Abfrage:

SELECT AVG(skill_level)
FROM employees;

Dies ist das Ergebnis:

AVG(skill_level)
18.714285714285715

Die Funktion AVG() nimmt einen Spaltennamen als Argument (auch Operand genannt) und berechnet dann den Durchschnitt für alle Werte in der Spalte. In diesem Fall gibt unsere Abfrage also den Durchschnitt aller Werte in der Spalte skill_level zurück.

Sie werden feststellen, dass das Ergebnis mit vielen Dezimalstellen angezeigt wird. Da Sie es selten so genau brauchen, sollten Sie diese Zahl auf die nächste Ganzzahl runden. Sie können AVG() in andere SQL-Funktionen wie ROUND() eingebettet verwenden, etwa so:

SELECT ROUND(AVG(skill_level))
FROM employees;

Das Ergebnis sieht nun wie folgt aus:

AVG(skill_level)
19

Die Funktion innerhalb der Klammern wird zuerst ausgewertet. Die Abfrage berechnet also zuerst den Durchschnitt und rundet dann das Ergebnis, so dass Sie den Wert 19 erhalten.

Beispiel 2

Im obigen Beispiel haben wir AVG() im SELECT Teil der Abfrage verwendet. Gehen wir nun einige weitere SQL AVG() Beispiele durch.

Angenommen, Sie möchten eine Liste der Mitarbeiter erhalten, deren Gehälter über dem Unternehmensdurchschnitt liegen. Wenn Sie mit SQL noch nicht vertraut sind, werden Sie vielleicht zuerst etwas wie diese Abfrage schreiben:

SELECT lastname
FROM   employees
WHERE  annual_salary > AVG(annual_salary);

Wenn Sie die Abfrage ausführen, erhalten Sie etwa die folgende Ausgabe:

ERROR 1111 (HY000): Invalid use of group function

Diese Abfrage führt zu einem Fehler, da Sie AVG() nicht in einer WHERE Bedingung verwenden können. Da AVG() eine Gruppenfunktion ist, können Sie sie nur in einer SELECT -Anweisung oder in einer HAVING-Klausel verwenden.

Führen Sie stattdessen die folgende Abfrage aus:

SELECT   lastname, annual_salary
FROM     employees
WHERE    annual_salary > (SELECT AVG(annual_salary)
		 		    FROM employees);

Hier ist das Ergebnis:

lastnameannual_salary
Patterson10000
Patterson12500
Bondur10000
Thompson10000

Die Abfrage innerhalb einer Hauptabfrage wird Subquery genannt. Hier verwenden wir zunächst eine Unterabfrage (unten hervorgehoben), um den Durchschnittswert von annual_salary aus der Tabelle employees Tabelle. Dann vergleichen wir ihn mit jedem Wert in der Spalte, um das Ergebnis zu erhalten.

SELECT  lastname, annual_salary
FROM    employees
WHERE   annual_salary > (SELECT AVG(annual_salary)
				 FROM employees);

Sehen Sie etwas Interessantes?

Es gibt einen Datensatz in unserer Tabelle mit einem NULL-Wert in annual_salary, aber unsere Abfrage hat keinen Fehler ausgelöst. Das liegt daran, dass die Funktion SQL AVG() NULL s ignoriert und einfach den Durchschnitt der anderen Datensätze mit numerischen Werten berechnet. Das heißt, sie ignoriert den Wert aus der unten gezeigten Zeile.

employeenumberlastnameskill_levelannual_salarydepartment
1076Firrelli10NULLMarketing

AVG() mit einer DISTINCT-Klausel

Stellen Sie sich vor, Sie haben einige doppelte Daten in Ihren Tabellen und Sie möchten doppelte Werte bei der Berechnung des Durchschnitts ignorieren.

Um dies in SQL zu tun, müssen Sie eine DISTINCT Klausel verwenden. Sie sehen, dass die Spalte annual_salary in unserer Tabelle employees Tabelle hat Werte, die sich wiederholen, zum Beispiel 5000 und 10000. Wenn wir wollen, dass SQL diese Werte nur einmal berücksichtigt, verwenden wir AVG() mit einer DISTINCT Klausel.

So unterscheiden sich die Ergebnisse:

QueryResult
SELECT AVG(annual_salary) FROM employees;8750.00
SELECT AVG(DISTINCT annual_salary) FROM employees;9166.667

Im ersten Fall wurde der Wert 10.000 dreimal und der Wert 5.000 zweimal berücksichtigt. Im zweiten Fall wurden diese Werte jeweils nur einmal gezählt, daher der Unterschied in den Ergebnissen.

Aggregat-Funktionen

AVG() gehört zu einer Klasse von Funktionen, die als Aggregatfunktionen bekannt sind. Eine Aggregatfunktion gibt ein einziges berechnetes Ergebnis über mehrere Zeilen zurück.

Diese Funktionen sind für die Analyse äußerst wichtig. Oft ist es unmöglich, jeden einzelnen Datensatz durchzugehen, um Erkenntnisse aus einer Tabelle zu gewinnen, die Millionen von Zeilen enthalten kann. Daher fasst man diese Millionen von Zeilen zu sinnvollen Gruppen zusammen.

Nehmen wir an, Sie arbeiten bei Facebook und möchten herausfinden, welche Altersgruppen die meiste Zeit mit Ihrer App verbringen. In diesem Fall erstellen Sie Gruppen/Buckets mit verschiedenen Altersgruppen und ermitteln dann die durchschnittlich verbrachte Zeit für jedes Bucket.

Hier sind einige der anderen Aggregatfunktionen, jeweils mit einem Anwendungsbeispiel:

Aggregate FunctionExample Use Case
SUM()Find the sum of salaries by department.
COUNT()Find the number of employees in each department.
MAX()Find the highest salary paid in each department.
MIN()Find the lowest salary paid in each department.
AVG()Find the average salary for each department.

Wenn Ihnen das jetzt nicht ganz klar ist, machen Sie sich keine Sorgen. Ich habe einige gute SQL AVG() Beispiele.

Die SQL-Funktion AVG() mit einer GROUP BY-Klausel

Um zu zeigen, wie AVG() als Aggregatfunktion in der Praxis funktioniert, möchte ich Ihnen zeigen, wie Sie AVG() mit einer GROUP BY-Klausel verwenden können.

Die SQL GROUP BY-Klausel wird verwendet, um Zeilen zusammenzufassen. In den meisten Fällen hat eine GROUP BY Klausel eine oder mehrere Aggregatfunktionen, die eine oder mehrere Metriken für die Gruppe berechnen.

Beispiel 3

Stellen Sie sich vor, Sie arbeiten als Analyst in der Vergütungsabteilung eines Unternehmens. Sie möchten das Durchschnittsgehalt eines Mitarbeiters nach Abteilung herausfinden. Dazu können Sie eine GROUP BY Klausel mit AVG() wie folgt verwenden:

SELECT     department,
	      AVG(annual_salary)
FROM       employees
GROUP BY   department;

Hier ist das Ergebnis dieser Abfrage:

departmentAVG(annual_salary)
Finance11250.00
Marketing10000.00
Human Resources10000.00
Sales5000.00

Sie fasst alle Datensätze nach Abteilung zusammen und berechnet dann den Durchschnitt annual_salary für jede Abteilung.

Beispiel 4

Wenn Sie in einem großen Unternehmen mit vielen Abteilungen arbeiten, möchten Sie sich vielleicht auf die Abteilungen konzentrieren, deren Durchschnittsgehalt höher als ein bestimmter Wert ist. Zu diesem Zweck müssen Sie einige Gruppen aus dem Ergebnis Ihrer Abfrage herausfiltern.

Nehmen wir an, Sie möchten die Abteilungen finden, deren Durchschnittsgehälter 10000 übersteigen. Ihre Abfrage sieht wie folgt aus:

SELECT     department,
	      AVG(annual_salary)
FROM       employees
GROUP BY   department
HAVING     AVG(annual_salary) > 10000;

Hier ist das Ergebnis dieser Abfrage:

departmentAVG(annual_salary)
Finance11250.00

Da nur die Finanzabteilung ein Durchschnittsgehalt von mehr als 10.000 hat, ist dies die einzige Zeile, die zurückgegeben wird.

Weitere Informationen über das Filtern von Datensätzen mit Aggregatfunktionen finden Sie in diesem Artikel.

Sie müssen AVG() nicht in der SELECT Anweisung haben, um es in einer HAVING Klausel zu verwenden. Die folgende Abfrage gibt Ihnen zum Beispiel nur den Namen der Abteilung im Ergebnis aus:

SELECT      department
FROM        employees
GROUP BY    department
HAVING      AVG(annual_salary) > 10000;

Und das Ergebnis:

department
Finance

Die SQL-Funktion AVG() mit einer CASE-Anweisung

Sie können auch AVG() mit einer CASE Anweisung verwenden. Wenn Sie mit CASE nicht vertraut sind, schauen Sie sich diesen Artikel an.

Beispiel 5

Angenommen, Sie möchten "Hoch" als Kategorie anzeigen, wenn das Durchschnittsgehalt größer als 7.000 ist, und "Niedrig", wenn es gleich oder kleiner ist. So sieht die Abfrage aus:

SELECT department,
	   CASE WHEN AVG(annual_salary) > 7000 THEN 'High'
	   ELSE 'Low' END as category
FROM employees
GROUP BY department;

Das Ergebnis dieser Abfrage:

departmentcategory
FinanceHigh
MarketingHigh
Human ResourceHigh
SalesLow

Der Durchschnitt wird für jede Abteilung berechnet und dann mit 7.000 verglichen. Wenn das Durchschnittsgehalt einer Abteilung höher als 7.000 ist, wird 'High' als category zurückgegeben.

Wann sollte man AVG() nicht verwenden?

Obwohl der Durchschnitt nützlich ist, hat er als Metrik seine Grenzen. Dies gilt insbesondere dann, wenn die Werte in Ihrem Datensatz stark verzerrt sind.

Nehmen wir zum Beispiel an, Sie betreiben einen YouTube-Kanal und haben bisher 20 Videos hochgeladen. Ein Video hat eine Million Aufrufe erreicht, aber der Rest hat noch keine Aufmerksamkeit erregt. Es ist zwar technisch möglich, den Durchschnitt zu berechnen, aber in Wirklichkeit trägt nur ein Video zum Durchschnitt von 200.000 bei.

Wenn die Werte sehr schief sind, ist der Median oft eine bessere Metrik. Der Median ist der Wert am 50. Perzentil einer Reihe, d. h. der Punkt, an dem die Hälfte der Werte in der Reihe/Gruppe darunter und die Hälfte darüber liegt.

Sind Sie bereit, die SQL-Funktion AVG() in Ihren Abfragen zu verwenden?

Inzwischen sollten Sie die SQL-Funktion AVG() und die verschiedenen Möglichkeiten ihrer Verwendung gut kennen. Wenn Sie gerade erst anfangen und einen Beruf ergreifen wollen, der mit Daten zu tun hat, ist SQL ein unverzichtbares Werkzeug.

Um mehr über Standardfunktionen wie AVG() zu erfahren, empfehle ich diesen Kurs von LearnSQL.de. Der Kurs ist wunderbar gestaltet und verstärkt das Gelernte durchgehend, damit Sie das Gelernte auch behalten können. Wenn Sie unbedingt SQL von Grund auf lernen wollen, sollten Sie sich den Kurs SQL A bis Z ansehen.

Der Schlüssel zum Erlernen von SQL ist das Üben und das ständige Informieren über die Entwicklungen und neuen Funktionen. Lesen Sie also weiterhin Artikel von LearnSQL.de für mehr und das Neueste in SQL.

Viel Spaß beim Lernen!