24th Nov 2022 8 Leseminuten Die SQL-Funktion AVG() mit Beispielen erklärt Himanshu Kathuria Aggregatfunktionen Inhaltsverzeichnis Was macht die SQL-Funktion AVG()? Beispiel 1 Beispiel 2 AVG() mit einer DISTINCT-Klausel Aggregat-Funktionen Die SQL-Funktion AVG() mit einer GROUP BY-Klausel Beispiel 3 Beispiel 4 Die SQL-Funktion AVG() mit einer CASE-Anweisung Beispiel 5 Wann sollte man AVG() nicht verwenden? Sind Sie bereit, die SQL-Funktion AVG() in Ihren Abfragen zu verwenden? 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! Tags: Aggregatfunktionen