Stell dir vor... Du hast eine riesige Einkaufsliste aus dem Supermarkt. Du willst wissen, wie viel Geld du am Ende ausgegeben hast. Du wirst doch nicht alles per Hand zusammenrechnen, oder? Die Kassierer:innen haben das alles schon in ihrer Datenbank. Deshalb bekommst du den Kassenbon mit der richtigen Summe. Wahrscheinlich hilft irgendwo in deren App unsere Heldin des heutigen Tages — die Funktion SUM()! Das ist eine Aggregatfunktion, mit der du Werte in einer numerischen Spalte zusammenzählen kannst.
Syntax von SUM()
Die Funktion SUM() sieht genauso einfach aus wie ihr Name, aber lass uns das mal Schritt für Schritt anschauen:
SELECT SUM(spalte)
FROM tabelle;
Die Funktion nimmt alle Werte in der angegebenen Spalte und summiert sie. Aber mal ehrlich: Magisches Addieren von Texten oder Daten gibt's hier nicht! Nur Zahlen.
Beispiele für die Verwendung von SUM()
Lass uns mit einem einfachen Beispiel starten. Wir arbeiten mit der Tabelle salaries, die die Gehälter der Mitarbeitenden speichert:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 55000 |
| 4 | 75000 |
Beispiel 1: Alle Gehälter aufsummieren
Du willst wissen, wie hoch die gesamte Gehaltssumme der Firma ist. So geht's:
SELECT SUM(salary) AS total_salary
FROM salaries;
Ergebnis:
| total_salary |
|---|
| 240000 |
Was ist hier passiert? PostgreSQL hat alle Werte aus der Spalte salary (50000 + 60000 + 55000 + 75000) addiert und das Ergebnis in einer neuen Spalte mit dem Namen total_salary zurückgegeben.
Beispiel 2: Summieren mit Bedingung
Angenommen, du willst die Gesamtsumme der Gehälter nur von Mitarbeitenden wissen, die mehr als 55.000 verdienen. Erinnern wir uns an unseren Lieblingsoperator WHERE:
SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;
Ergebnis:
| high_salary_total |
|---|
| 135000 |
Was ist hier passiert? Zuerst hat PostgreSQL den Filter WHERE salary > 55000 angewendet und nur die Zeilen mit Gehältern 60000 und 75000 übrig gelassen. Dann wurden diese beiden Gehälter addiert (60000 + 75000).
3. Besonderheiten bei SUM()
Wie beeinflusst NULL die SUM()? Wie wir schon gesehen haben, ist NULL einfach "nichts", und SUM() bezieht das nicht in die Berechnung ein. Schauen wir uns die Tabelle an:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | NULL |
| 4 | 75000 |
Wenn wir jetzt die gesamte Gehaltssumme wissen wollen:
SELECT SUM(salary) AS total_salary
FROM salaries;
Ergebnis:
| total_salary |
|---|
| 185000 |
Warum "185000" und nicht "NULL"? PostgreSQL ignoriert NULL einfach bei der Summenberechnung.
Beispiele für komplexere Abfragen mit SUM()
Beispiel 1: Summieren und Filtern in einer Abfrage
Stell dir eine Tabelle sales vor, die Verkaufsdaten speichert. So sieht sie aus:
| product_id | amount |
|---|---|
| 1 | 150 |
| 2 | 200 |
| 3 | NULL |
| 1 | 100 |
Du willst die Gesamtsumme der Verkäufe (amount) nur für das erste Produkt (product_id = 1) wissen:
SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;
Ergebnis:
| total_sales |
|---|
| 150 |
Beispiel 2: Summe und weitere Berechnungen
Wir arbeiten wieder mit der Tabelle salaries. Du willst wissen, um wie viel die Gehaltssumme 200.000 übersteigt:
SELECT SUM(salary) - 200000 AS surplus
FROM salaries;
Ergebnis:
| surplus |
|---|
| 40000 |
Typische Fehler bei der Verwendung von SUM()
SUM() auf nicht-numerische Daten anwenden: Wenn du aus Versehen versuchst, zum Beispiel Textwerte zu summieren, bekommst du einen Fehler. Sei vorsichtig und check die Datentypen in deiner Spalte.
NULL ignorieren: Viele Anfänger:innen vergessen NULL und denken, dass es in die Berechnung einfließt. Das kann zu unerwarteten Ergebnissen führen.
GO TO FULL VERSION