Direkt zum Inhalt
Urkunden
FunktionenAusdrückeSchlüsselwörterAussagenKlauseln

MySQL HAVING-Klausel

Die `HAVING`-Klausel in MySQL wird verwendet, um Datensätze zu filtern, die auf aggregierten Daten arbeiten, die von `GROUP BY` zurückgegeben werden. Damit kannst du Bedingungen festlegen, die bestimmen, welche Gruppenergebnisse in der Ausgabe enthalten sind.

Verwendung

Die Klausel `HAVING` wird nach `GROUP BY` angewendet, um Daten auf der Grundlage von Aggregatfunktionen wie `SUM`, `COUNT` oder `AVG` zu filtern. Im Gegensatz zur `WHERE`-Klausel, die nicht auf aggregierten Daten operieren kann und für die Filterung auf Zeilenebene verwendet wird, ist `HAVING` speziell für aggregatbasierte Bedingungen konzipiert.

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

In dieser Syntax gibt `HAVING condition` die aggregatbasierte Bedingung an, um gruppierte Ergebnisse zu filtern.

Hinweis: In der Ausführungsreihenfolge von SQL-Klauseln wird `HAVING` nach `GROUP BY` und vor `ORDER BY` verarbeitet.

Beispiele

1. Grundlegende HAVING-Verwendung

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5;

In diesem Beispiel werden Abteilungen mit mehr als fünf Mitarbeitern gefunden, indem das aggregierte Ergebnis mit `HAVING` gefiltert wird.

2. HAVING mit SUM verwenden

SELECT customer_id, SUM(order_total) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 1000;

Hier filtert die Klausel `HAVING` Kunden heraus, die insgesamt mehr als $1000 ausgegeben haben.

3. Mehrere Bedingungen in HAVING

SELECT product_category, AVG(price) AS avg_price
FROM products
GROUP BY product_category
HAVING avg_price BETWEEN 100 AND 500 AND COUNT(product_id) > 10;

In diesem Beispiel werden mehrere Bedingungen in `HAVING` verwendet, um Produktkategorien mit einem Durchschnittspreis zwischen $100 und $500 und mehr als zehn Produkten zu finden.

4. HAVING mit ORDER BY verwenden

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5
ORDER BY num_employees DESC;

Dieses Beispiel zeigt die Verwendung von `ORDER BY` mit `HAVING`, um die Ergebnisse von Abteilungen mit mehr als fünf Mitarbeitern in absteigender Reihenfolge nach der Anzahl der Mitarbeiter zu sortieren.

Tipps und bewährte Praktiken

  • Verwende `HAVING` für aggregierte Filterung. Wende `HAVING` an, wenn du die Ergebnisse auf Basis von aggregierten Daten filterst, nicht für die Filterung auf Zeilenebene.
  • Kombiniere mit `GROUP BY`. Verwende immer `HAVING` mit `GROUP BY`, weil `HAVING` mit gruppierten Daten arbeitet.
  • Optimiere mit Indizes. Stelle eine effiziente Ausführung von Abfragen sicher, indem du Indizes auf Spalten verwendest, die in `GROUP BY` enthalten sind.
  • Begrenze komplexe Bedingungen. Halte die "HAVING"-Bedingungen einfach, um die Leistung und Lesbarkeit zu erhalten.

SQL Upskilling für Einsteiger

Erwerbe die SQL-Kenntnisse, um mit deinen Daten zu interagieren und sie abzufragen.
Kostenloses Lernen beginnen