Kategorien:

Aggregationsfunktionen (Allgemein), Fensterfunktionen (Allgemein, Fensterrahmen)

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

Weitere Informationen zur Syntax von window_frame finden Sie unter Syntax und Nutzung von Fensterrahmen.

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, auf der die Sortierung jedes Fenster erfolgen soll. Beachten Sie, dass dies unabhängig von jeder ORDER BY-Klausel erfolgt, um das endgültige Resultset zu sortieren.

Rückgabewerte

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

Nutzungshinweise

  • Wenn diese Funktion als Fensterfunktion aufgerufen wird:

    • Wenn in der OVER()-Klausel eine ORDER BY-Unterklausel verwendet wird, muss ein Fensterrahmen verwendet werden. Wenn kein Fensterrahmen angegeben ist, ist der Standard ein kumulativer Fensterrahmen:

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      Weitere Informationen zu Fensterrahmen, einschließlich Syntax und Beispiele, finden Sie unter Syntax und Nutzung von Fensterrahmen. Weitere Informationen zu impliziten Fensterrahmen finden Sie unter Hinweise zur Nutzung von Fensterrahmen.

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