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

PostgreSQL FILTER

Die `FILTER` Klausel in PostgreSQL wird verwendet, um Bedingungen auf Aggregatfunktionen anzuwenden, die eine genauere Kontrolle darüber ermöglichen, welche Zeilen in die Aggregation einbezogen werden. Sie ist besonders nützlich für die Durchführung bedingter Aggregationen direkt im Aufruf der Aggregatfunktion.

Verwendung

Die Klausel `FILTER` wird bei Aggregatfunktionen verwendet, um eine Bedingung anzugeben, die bestimmt, welche Zeilen in die Berechnung einbezogen werden. Sie wird direkt nach der Aggregatfunktion geschrieben und in Klammern gesetzt.

sql
SELECT aggregate_function(column) FILTER (WHERE condition)
FROM table_name;

In dieser Syntax sorgt `FILTER (WHERE condition)` dafür, dass nur Zeilen, die die angegebene Bedingung erfüllen, von der Aggregatfunktion berücksichtigt werden. Übliche Aggregatfunktionen, die mit `FILTER` verwendet werden, sind `SUM`, `COUNT`, `AVG`, `MIN` und `MAX`. Außerdem kann die `FILTER`-Klausel mit Fensterfunktionen für analytische Abfragen kombiniert werden.

Beispiele

1. Grundlegende Verwendung mit COUNT

sql
SELECT COUNT(*) FILTER (WHERE status = 'active') AS active_count
FROM users;

In diesem Beispiel werden nur die Zeilen in der Tabelle "Benutzer" gezählt, deren "Status" "aktiv" ist.

2. FILTER mit SUMME verwenden

sql
SELECT SUM(salary) FILTER (WHERE department = 'IT') AS total_it_salary
FROM employees;

Hier berechnet die Funktion "SUMME" die Gesamtgehälter nur für die Mitarbeiter der IT-Abteilung.

3. Kombinieren mehrerer Aggregate

sql
SELECT 
    COUNT(*) AS total_orders,
    COUNT(order_id) FILTER (WHERE status = 'completed') AS completed_orders,
    AVG(amount) FILTER (WHERE status = 'completed') AS average_completed_amount
FROM orders;

Dieses Beispiel berechnet die Gesamtzahl der Bestellungen, die Anzahl der abgeschlossenen Bestellungen und die durchschnittliche Anzahl der abgeschlossenen Bestellungen, alles in einer einzigen Abfrage.

Tipps und bewährte Praktiken

  • Verwendung für bedingte Logik. Verwende `FILTER`, um Bedingungen direkt auf Aggregatfunktionen anzuwenden und so komplexe Abfragen zu vereinfachen.
  • Verbessere die Lesbarkeit. Wenn du `FILTER` verwendest, kannst du verschachtelte Unterabfragen vermeiden und eine saubere Abfragestruktur erhalten.
  • Kombiniere mit GROUP BY. Der `FILTER` kann effektiv mit `GROUP BY` für gruppierte bedingte Aggregationen kombiniert werden. Zum Beispiel:
sql
SELECT department, COUNT(employee_id) FILTER (WHERE status = 'active') AS active_employees
FROM employees
GROUP BY department;
  • Teste die Bedingungen separat. Stelle sicher, dass die Logik in deiner `FILTER`-Klausel korrekt ist, indem du die Bedingungen nach Möglichkeit unabhängig voneinander testest.
  • Beobachte die Leistung bei großen Datensätzen. Während `FILTER` Abfragen vereinfachen kann, muss sichergestellt werden, dass die Leistung optimal ist, insbesondere bei großen Datensätzen und komplexen Bedingungen.
  • Einhaltung des SQL-Standards. Die `FILTER`-Klausel ist Teil des SQL-Standards und bietet Kompatibilitätsvorteile für datenbankübergreifende Abfragen.

Häufige Fallstricke und Irrtümer

  • Bedingung Logisches Missverständnis: Achte darauf, dass die Bedingung in der `FILTER`-Klausel korrekt angegeben ist, um unerwartete Ergebnisse zu vermeiden.
  • Überlegungen zur Leistung: Achte auf die möglichen Auswirkungen auf die Leistung bei großen Datenmengen und optimiere sie, wo nötig.

Vergleich von FILTER mit CASE

Die `FILTER`-Klausel unterscheidet sich von der Verwendung von `CASE`-Anweisungen innerhalb von Aggregatfunktionen. Während `FILTER` eine prägnantere und lesbarere Syntax für bedingte Aggregation bietet, bietet `CASE` Flexibilität für komplexere Logik. Wähle `FILTER` für einfachere Bedingungen und `CASE`, wenn eine detailliertere Logik erforderlich ist.