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.
|