Direkt zum Inhalt
Urkunden
JSON-FunktionenTabellen & Schema ManagementMathe-FunktionenDatenbankenString-FunktionenAuslöserIndizesDatum FunktionenBasic Syntax

PostgreSQL HAVING

Die HAVING Klausel in PostgreSQL wird verwendet, um Datensätze zu filtern, die mit Aggregatfunktionen arbeiten. Sie ermöglicht es dir, Bedingungen für Gruppen festzulegen, die mit der GROUP BY Klausel erstellt wurden.

Verwendung

Die HAVING Klausel wird verwendet, wenn du Datengruppen in Verbindung mit Aggregatfunktionen wie SUM, COUNT oder AVG filtern musst. Sie kommt nach der GROUP BY Klausel und vor ORDER BY, wenn sie verwendet wird.

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

In dieser Syntax filtert HAVING condition die Ergebnisse, die von der GROUP BY Klausel zurückgegeben werden, basierend auf den Ergebnissen der Aggregatfunktion. Während WHERE die Zeilen vor der Aggregation filtert, wendet HAVING die Bedingungen nach der Aggregation an.

Beispiele

1. Grundlegender Gruppenfilter

SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

Diese Abfrage listet Abteilungen mit mehr als 10 Mitarbeitern auf, indem sie Gruppen filtert, die mit der GROUP BY Klausel erstellt wurden.

2. SUMME mit HAVING verwenden

SELECT product_id, SUM(quantity)
FROM sales
GROUP BY product_id
HAVING SUM(quantity) > 100;

Hier findet die Abfrage Produkte, von denen mehr als 100 Stück verkauft wurden, indem sie nach der Summe der Mengen filtert.

3. Komplexe Bedingung mit mehreren Aggregaten

SELECT manager_id, COUNT(employee_id), AVG(salary)
FROM employees
GROUP BY manager_id
HAVING COUNT(employee_id) > 5 AND AVG(salary) < 70000;

Dieses Beispiel filtert Manager, die mehr als fünf Mitarbeiter beaufsichtigen und ein Durchschnittsgehalt von unter 70.000 USD haben.

4. HAVING ohne GROUP BY

SELECT SUM(quantity)
FROM sales
HAVING SUM(quantity) > 1000;

Dieses Beispiel zeigt, wie du mit HAVING ohne GROUP BY den gesamten Datensatz filterst, um herauszufinden, ob die Gesamtmenge 1000 Einheiten übersteigt.

Tipps und bewährte Praktiken

  • Verwendung mit GROUP BY. HAVING wurde entwickelt, um mit GROUP BY zusammenzuarbeiten; stelle sicher, dass deine Abfrage die Daten entsprechend gruppiert, obwohl sie auch ohne sie für die Aggregation des gesamten Datensatzes verwendet werden kann.
  • Optimiere mit Indizes. Erwäge, die in der GROUP BY Klausel verwendeten Spalten zu indizieren, um die Leistung zu verbessern.
  • Frühzeitig mit WHERE filtern. Verwende die WHERE Klausel, um Zeilen vor der Aggregation zu filtern, um die Effizienz zu erhöhen.
  • Vermeide übermäßigen Gebrauch. Verwende HAVING sparsam, da das Filtern von aggregierten Ergebnissen ressourcenintensiv sein kann.