Kategorien:

Aggregatfunktionen (General) , Fensterfunktionen

COUNT_IF

Gibt die Anzahl der Datensätze zurück, die eine Bedingung erfüllen, oder NULL, wenn kein Datensatz die Bedingung erfüllt.

Siehe auch:

COUNT

Syntax

Aggregatfunktion

COUNT_IF( <condition> )
Copy

Fensterfunktionen

COUNT_IF( <condition> )
    OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ ASC | DESC ] [ <window_frame> ] ] )
Copy

Die detaillierte Syntax von window_frame finden Sie unter Syntax und Verwendung von Fensterfunktionen.

Argumente

condition

Die Bedingung ist ein Ausdruck, der einen BOOLEAN-Wert („true“, „false“ oder NULL) ergibt.

expr1

Die Spalte für die Partitionierung, wenn das Ergebnis auf mehrere Fenster aufgeteilt werden soll.

expr2

Die Spalte, in der jedes Fenster sortiert werden soll. Beachten Sie, dass dies unabhängig von der ORDER BY-Klausel ist, die das endgültige Resultset sortiert.

Rückgabewerte

Wenn die Funktion nicht NULL zurückgibt, ist der Datentyp des zurückgegebenen Werts NUMBER.

Nutzungshinweise

  • Wenn diese Funktion als Fensterfunktion mit einer ORDER BY-Klausel aufgerufen wird, müssen Sie einen Fensterrahmen angeben. Wenn Sie keinen Fensterrahmen angeben, wird der folgende Standardrahmen verwendet:

    RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

    Weitere Informationen über Fensterrahmen, einschließlich Syntax, Nutzungshinweise und Beispiele, finden Sie unter Syntax und Verwendung von Fensterfunktionen.

Beispiele

Die Beispiele in diesem Abschnitt zeigen die Verwendung der Funktion COUNT_IF.

Mit den folgenden Anweisungen wird eine Tabelle zur Verwendung in den Beispielen erstellt:

CREATE TABLE basic_example (i_col INTEGER, j_col INTEGER);
INSERT INTO basic_example VALUES
    (11,101), (11,102), (11,NULL), (12,101), (NULL,101), (NULL,102);
Copy
SELECT *
    FROM basic_example
    ORDER BY i_col;
Copy
+-------+-------+
| I_COL | J_COL |
|-------+-------|
|    11 |   101 |
|    11 |   102 |
|    11 |  NULL |
|    12 |   101 |
|  NULL |   101 |
|  NULL |   102 |
+-------+-------+

Das folgende Beispiel übergibt TRUE für die Bedingung, die die Anzahl aller Zeilen in der Tabelle zurückgibt:

SELECT COUNT_IF(TRUE) FROM basic_example;
Copy
+----------------+
| COUNT_IF(TRUE) |
|----------------|
|              6 |
+----------------+

Das folgende Beispiel gibt die Anzahl der Zeilen zurück, in denen der Wert in J_COL größer als der Wert in I_COL ist:

SELECT COUNT_IF(j_col > i_col) FROM basic_example;
Copy
+-------------------------+
| COUNT_IF(J_COL > I_COL) |
|-------------------------|
|                       3 |
+-------------------------+

Beachten Sie, dass die Anzahl im obigen Beispiel keine Zeilen mit NULL-Werten enthält. Wie in Ternäre Logik erläutert, ist das Ergebnis NULL, wenn ein Operand für einen Vergleichsoperator NULL ist, wodurch die mit COUNT_IF angegebene Bedingung nicht erfüllt wird.

Das folgende Beispiel gibt die Anzahl der Zeilen zurückgibt, die keine NULL-Werte enthalten.

SELECT COUNT_IF(i_col IS NOT NULL AND j_col IS NOT NULL) FROM basic_example;
Copy
+---------------------------------------------------+
| COUNT_IF(I_COL IS NOT NULL AND J_COL IS NOT NULL) |
|---------------------------------------------------|
|                                                 3 |
+---------------------------------------------------+