Database
 sql >> Datenbank >  >> RDS >> Database

So filtern Sie Datensätze mit der Aggregatfunktion SUM

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.