Die FILTER-Klausel erweitert Aggregatfunktionen (SUM, AVG, COUNT, etc.) um eine zusätzliche WHERE-Klausel.Dadurch werden die von den Aggregatfunktionen verarbeiteten Zeilen auf die Zeilen beschränkt, die die Bedingungen sowohl der 'WHERE'-Hauptklausel als auch derjenigen innerhalb der 'FILTER'-Klausel erfüllen.
Es kann als eine explizitere Form der Verwendung einer Aggregatfunktion mit einer Bedingung (decode, case, iif) betrachtet werden, um einige Werte zu ignorieren, die ansonsten von der Aggregation berücksichtigt würden.
Die Klausel kann mit allen Aggregatfunktionen in Aggregat- oder Window-(OVER)-Anweisungen verwendet werden, jedoch nicht mit Nur-Window-Funktionen wie DENSE_RANK.
Beispiel für FILTER
Angenommen, Sie benötigen eine Abfrage, um die Anzahl von status = 'A' und die Anzahl von status = 'E' als unterschiedliche Spalten zu zählen.Die alte Vorgehensweise wäre:
select count(decode(status, 'A', 1)) status_a,
count(decode(status, 'E', 1)) status_e
from data;
Mit der FILTER-Klausel können Sie diese Bedingungen expliziter ausdrücken:
select count(*) filter (where status = 'A') status_a,
count(*) filter (where status = 'E') status_e
from data;
|
Tip
|
Sie können mehr als einen 'FILTER'-Modifikator in einer Aggregatabfrage verwenden.Sie könnten zum Beispiel 12 Filter für Gesamtsummen verwenden, die den Umsatz für ein Jahr aggregieren, um monatliche Zahlen für einen Pivot-Satz zu erstellen.
|