23rd Jun 2022 7 Leseminuten Wer hat das höchste Gehalt, je nach Abteilung? Verwenden Sie SQL, um das herauszufinden! Himanshu Kathuria GROUP BY Inhaltsverzeichnis Der Beispieldatensatz Was ist Aggregation? Die SQL GROUP BY-Klausel Beispielstruktur einer Abfrage mit einer GROUP BY-Klausel SELECT-Spalten und Aggregatfunktion FROM <Tabelle(n)> und WHERE <Bedingungen> Auflistung der Spalten für die Gruppierung mit einem GROUP BY Bedingungen für die Aggregatfunktion mit einer HAVING-Klausel Sortieren mit einer ORDER BY-Klausel Sind Sie bereit, Ihre SQL GROUP BY-Abfrage zu schreiben? DieserArtikel zeigt, wie man das Gesamtgehalt nach Abteilung für eine Organisation mit Hilfe der GROUP BY-Funktionalität von SQLermitteln kann. Wir erklären die SQL GROUP BY-Klausel im Detail zusammen mit der bedingten Filterung mit einer HAVING-Klausel. Die Gehaltskosten eines Unternehmens zu verstehen, ist einer der häufigsten Ausgangspunkte für Unternehmensleiter. Es hilft ihnen zu erkennen, wer in der Organisation die höchsten Gesamtkosten für Gehälter hat, aufgeschlüsselt nach Abteilungen. Sie können sich auch die Verteilung der Gehaltszahlungen ansehen, um ein besseres Gefühl für die Kostenverteilung zu bekommen. In diesem Artikel zeige ich, wie Sie die SQL GROUP BY verwenden können, um dies zu erreichen. Wenn Sie ein Profi sind, der eine solche Analyse verwenden kann, oder wenn Sie ein Student sind, der versucht, die SQL GROUP BY-Funktionalität anhand eines praktischen Anwendungsfalls zu verstehen, lesen Sie weiter! Bevor wir uns an die Lösung des Problems machen, werfen wir einen Blick auf den Datensatz, den wir verwenden werden. Der Beispieldatensatz employees: employeenumberlastnamelevelannual_salarydepartment 1056Patterson1010000Finance 1076Firrel57000Marketing 1088Patterson1012500Finance 1102Bondur25000Human Resources 1143Bow25000Sales 1165Jennings25000Sales 1166Thompson1010000Marketing Oben sehen Sie die employees Tabelle mit fünf Spalten, mit selbsterklärenden Spaltennamen. employeenumber: Eindeutiger Bezeichner für den Mitarbeiter. lastname: Nachname des Mitarbeiters. level: Ebene des Mitarbeiters in der Hierarchie. annual_salary: Jahresgehalt des Mitarbeiters. department: Die Abteilung des Mitarbeiters. Angenommen, Sie möchten das gesamte Jahresgehalt der Mitarbeiter ermitteln, die verschiedenen Abteilungen angehören, z. B. Finanzen, Marketing, Personalwesen und Vertrieb. Diese Art der Datenverarbeitung wird als Aggregation bezeichnet. Was ist Aggregation? Da es insbesondere bei großen Datensätzen schwierig ist, jede Zeile einzeln zu analysieren, ist es oft sinnvoll, ähnliche Daten zu gruppieren, um einige Statistiken für jede dieser Gruppen zu verstehen. Dies wird als Aggregation bezeichnet. Vielleicht möchten Sie verschiedene Kundensegmente gruppieren (Aggregation nach Kundensegment), die durchschnittliche Bestellgröße berechnen, den Gesamtumsatz nach Region berechnen (Aggregation nach Region) oder die Gesamtzahl der Artikel verschiedener Verkäufer auf einer Website überprüfen (Aggregation nach Verkäufer). All dies sind Beispiele für die Datenaggregation, die bei der Analyse von Daten und der Gewinnung von Erkenntnissen helfen kann. Hier wollen wir also die Mitarbeiter nach Abteilung aggregieren und dann das Gesamtgehalt (d. h. die Summe der Gehälter) für alle Mitarbeiter dieser Abteilung berechnen. Sie denken vielleicht, dass Sie das für die obige Tabelle leicht tun können, indem Sie die Gehälter von Hand addieren. Aber wenn Sie Tausende von Mitarbeitern haben, brauchen Sie sicher eine schnellere Methode! Hier kann Ihnen die SQL-Klausel GROUP BY helfen. Die SQL GROUP BY-Klausel Mit der SQL-Klausel GROUP BY können Sie Daten in Gruppen zusammenfassen und dann die entsprechenden Statistiken für diese Gruppe berechnen. In unserem Fall können Sie die folgende Abfrage verwenden, um das Gesamtgehalt nach Abteilung zu berechnen. In den Kommentaren wird die Funktion der einzelnen Konstrukte in der Abfrage kurz erläutert. Abfrage: SELECT department, -- column to be returned SUM(annual_salary) -- aggregate function FROM employees -- table name GROUP BY department; -- column to use for grouping Ausgabe: departmentSUM(annual_salary) Finance22500 Marketing17000 Sales10000 Human Resources5000 Zum besseren Verständnis möchte ich etwas tiefer in die Struktur dieser Abfrage eintauchen und jede Klausel bzw. jedes verwendete Schlüsselwort erläutern. Beispielstruktur einer Abfrage mit einer GROUP BY-Klausel Wenn ich ein Skelett oder eine Beispielstruktur einer SQL-Abfrage zeichnen würde, die eine GROUP BY -Klausel verwendet, würde sie etwa so aussehen. Sie werden vielleicht nicht immer alle Konstrukte verwenden, aber es ist nützlich, sie zu verstehen. Beispielhafte Struktur: SELECT <columns>, <aggregate function> FROM <table name> WHERE <conditions> GROUP BY <columns> HAVING <aggregate condition> ORDER BY <columns> In unserer Abfrage zur Ermittlung des Gesamtgehalts nach Abteilung haben wir nur die Klauseln SELECT, FROM und GROUP BY verwendet. Schauen wir uns nun an, wie Sie jedes dieser Konstrukte verwenden können. SELECT-Spalten und Aggregatfunktion In diesem Teil der Abfrage geben Sie die Spalten an, die aggregiert und zurückgegeben werden sollen. Für das Gesamtgehalt nach Abteilung ist die Abteilung eine der Spalten, die zurückgegeben werden sollen. Hier wählen Sie auch die Aggregatfunktion aus. Die Aggregatfunktion ist die Metrik oder Statistik, die Sie für die gruppierte Spalte berechnen möchten. In unserem Fall ist SUM() die Aggregatfunktion. SQL bietet auch andere nützliche integrierte Aggregatfunktionen. In dieser Tabelle finden Sie verschiedene Aggregatfunktionen und ein Anwendungsbeispiel für jede Funktion. Aggregate FunctionExample Use Case SUM()Find the total salary 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 Um die Statistik zu ändern, müssen Sie nur die entsprechende Funktion verwenden. Wenn Sie zum Beispiel stattdessen das Durchschnittsgehalt berechnen möchten, können Sie diese Funktion verwenden: Abfrage: SELECT department, AVG(annual_salary) FROM employees GROUP BY department; Ausgabe: departmentAVG(annual_salary) Finance11250 Marketing8500 Sales5000 Human Resources5000 Sie können auch mehrere Aggregatfunktionen zusammen verwenden. Zum Beispiel: Abfrage: SELECT department, AVG(annual_salary), SUM(annual_salary) FROM employees GROUP BY department; Ausgabe: departmentAVG(annual_salary)SUM(annual_salary) Finance1125022500 Marketing850017000 Sales500010000 Human Resource50005000 FROM <Tabelle(n)> und WHERE <Bedingungen> In diesem Abschnitt geben Sie die Tabelle(n) an, aus der/denen Sie die Spalten abrufen möchten, sowie alle Bedingungen, die Sie auf die ausgewählten Spalten anwenden möchten. Nehmen wir an, Sie möchten die Daten für nur zwei Abteilungen - Marketing und Vertrieb - aus der employees Tabelle. Abfrage: SELECT department, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’) GROUP BY department; Ausgabe: departmentSUM(annual_salary) Marketing17000 Sales10000 Auflistung der Spalten für die Gruppierung mit einem GROUP BY In diesem Teil der Abfrage geben Sie die Spalten an, die Sie für die Gruppierung der Daten verwenden möchten. Die Gruppierung nach Abteilung haben wir bereits gesehen. Eine Sache, auf die Sie hier achten sollten: Wenn Sie mehrere Spalten in Ihrer SELECT Anweisung verwenden, müssen Sie sie alle hier in die GROUP BY Klausel aufnehmen, mit Ausnahme der Spalte(n), die von der/den Aggregatfunktion(en) verwendet werden. Wenn Sie das nicht tun, erhalten Sie wahrscheinlich eine Fehlermeldung. In diesem Artikel finden Sie Informationen zu häufigen Fehlern bei GROUP BY und wie Sie sie vermeiden können. Nehmen wir zum Beispiel an, Sie möchten SELECT und GROUP BY sowohl Abteilung als auch Ebene. Die Abfrage würde dann wie folgt aussehen. Abfrage: SELECT department, level, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’) GROUP BY department, level; Ausgabe: departmentlevelSUM(annual_salary) Marketing57000 Marketing1010000 Sales210000 Bedingungen für die Aggregatfunktion mit einer HAVING-Klausel Sie können die Ausgabe einer Abfrage mit einer Aggregatfunktion verfeinern und filtern, indem Sie eine HAVING Klausel verwenden. Eine HAVING Klausel wertet die Bedingung(en) für die Ausgabe einer Aggregatfunktion aus und gibt die Zeilen zurück, die diese Kriterien erfüllen. Wenn Sie also jede Abteilung finden möchten, deren Durchschnittsgehalt größer als 7000 ist, können Sie die folgende Abfrage verwenden. Abfrage: SELECT department, SUM(annual_salary) FROM employees GROUP BY department HAVING AVG(annual_salary)>7000; Ausgabe: departmentSUM(annual_salary) Finance22500 Marketing17000 Hinweis: Verwechseln Sie die WHERE-Klausel nicht mit der HAVING-Klausel. Während eine WHERE-Klausel Datensätze aus Tabellen filtert, filterteine HAVING-Klausel Gruppen. Sortieren mit einer ORDER BY-Klausel Schließlich können Sie Ihre Ergebnisse mit Hilfe einer ORDER BY-Klausel sortieren. Sie kann verwendet werden, um die Ergebnisse in aufsteigender oder absteigender Reihenfolge zu sortieren. Um die Abteilungen in alphabetischer Reihenfolge zu sortieren, können Sie die folgende Abfrage verwenden. Abfrage: SELECT department, level, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’,’Human Resources’) GROUP BY department,level ORDER BY department asc; -- asc is used for ascending, desc for descending Ausgabe: departmentlevelSUM(annual_salary) Human Resource25000 Marketing57000 Marketing1010000 Sales210000 Weitere Beispiele und Anwendungsfälle für die GROUP BY-Klausel finden Sie in diesem Artikel. Sind Sie bereit, Ihre SQL GROUP BY-Abfrage zu schreiben? Wenn Sie den Artikel bis hierher gelesen haben, bin ich sicher, dass Sie bereit sind, Ihre SQL GROUP BY-Abfrage zu schreiben, um das gewünschte Ergebnis zu erhalten. Ich habe in diesem Artikel viele Beispielabfragen verwendet, um Sie mit dem Prozess des Schreibens von Abfragen vertraut zu machen. Glauben Sie mir, Übung ist der beste Weg, um das Schreiben von Abfragen zu verbessern. Um Abfragen wie diese und weitere zu üben, können Sie den SQL-Praxis Track von LearnSQL besuchen. Es ist ein umfassender Weg, um Ihre Fähigkeiten weiter zu verbessern. SQL ist ein sehr leistungsfähiges Tool, nicht nur für die Datenaggregation, sondern auch für viele andere Anwendungsfälle, die Datenverarbeitung und -manipulation erfordern. Es ist nicht nur für Datenanalysten ein Muss, sondern für jeden, der in einem Umfeld arbeiten möchte, in dem Entscheidungen auf der Grundlage von Daten getroffen werden. Wenn Sie neu in SQL sind und mehr über das Schreiben von SQL-Abfragen lernen möchten, empfehle ich Ihnen den Kurs von LearnSQL zum Schreiben von grundlegenden Abfragen. Er wird Ihnen eine solide Grundlage für die Analyse von Daten mit SQL bieten und Ihre Karriere weiter voranbringen. Also, worauf warten Sie noch? Fangen Sie noch heute an! Tags: GROUP BY