Zurück zur Artikelliste Artikel
7 Leseminuten

Wer hat das höchste Gehalt, je nach Abteilung? Verwenden Sie SQL, um das herauszufinden!

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!