Problem:
Sie müssen Zeilen finden, in denen Gruppen eine Summe von Werten in einer Spalte haben, die kleiner als ein gegebener Wert ist.
Beispiel:
Unsere Datenbank hat eine Tabelle namens company
mit Daten in den folgenden Spalten:id
, department
, first_name
, last_name
und salary
.
id | Abteilung | Vorname | Nachname | Gehalt |
---|---|---|---|---|
1 | Marketing | Lora | Braun | 2300 |
2 | Finanzen | Johannes | Jackson | 3200 |
3 | Marketing | Michael | Thomson | 1270 |
4 | Produktion | Tony | Müller | 6500 |
5 | Produktion | Sally | Grün | 2500 |
6 | Finanzen | Olivier | Schwarz | 3450 |
7 | Produktion | Jeniffer | Michelin | 2800 |
8 | Marketing | Jeremy | Lorson | 3600 |
9 | Marketing | Louis | Smith | 4200 |
Lassen Sie uns die Namen von Abteilungen finden, deren Gehaltssummen ihrer Mitarbeiter weniger als 7000 betragen.
Lösung:
SELECT department, SUM(salary) FROM company GROUP BY department HAVING SUM(salary)<7000;
Hier ist das Ergebnis:
Abteilung | Summe |
---|---|
Finanzen | 6550 |
Diskussion:
Um Datensätze mit der Aggregatfunktion (der Funktion SUM von früher) zu filtern, verwenden Sie die HAVING-Klausel. Um die Summe der Werte für jede Zeilengruppe zu berechnen, verwenden Sie die Aggregationsfunktion SUM. In dieser Abfrage wird die Spalte Abteilung mit der Summe aller Gehälter ihrer Mitarbeiter als Gruppe berechnet (Berechnung mit der SUM-Funktion mit der Spalte Gehalt als Argument). Da Sie den Wert für jede Zeilengruppe berechnen (wir gruppieren Zeilen nach dem Namen der Abteilung), hat die Abfrage eine GROUP BY-Klausel mit dem Namen der Spalte, um Zeilen zu gruppieren (in unserem Beispiel GROUP BY department
). Der letzte Schritt ist die Verwendung der Aggregatfunktion in der HAVING-Klausel. Denken Sie daran, dass HAVING nach der GROUP BY-Klausel stehen sollte. HAVING enthält die Bedingung, die den von der Aggregatfunktion zurückgegebenen Wert mit einem gegebenen Wert vergleicht. Von oben sind es die Gehaltssummen mit einem Wert unter 7000 (SUM(salary)<7000
). ). Hier überprüfen wir, dass die Gehaltssumme in jeder Abteilung niedriger als 7000 ist. Die Abfrage zeigte nur eine Abteilung, Finanzen, mit Gehältern von 6550.