Catégories :

Fonctions d’agrégation (General) , Fonctions de fenêtre

COUNT_IF

Renvoie le nombre d’enregistrements qui satisfont une condition ou NULL si aucun enregistrement ne satisfait à la condition.

Voir aussi :

COUNT

Syntaxe

Fonction d’agrégation

COUNT_IF( <condition> )
Copy

Fonction de fenêtre

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

Pour plus de détails sur la syntaxe window_frame, voir Syntaxe et utilisation des fonctions de fenêtre.

Arguments

condition

La condition est une expression qui doit donner une valeur BOOLEAN (True, False ou NULL).

expr1

La colonne sur laquelle partitionner, si vous voulez que le résultat soit divisé en plusieurs fenêtres.

expr2

La colonne selon laquelle classer chaque fenêtre. Notez que cela est distinct de la clause ORDER BY qui trie le jeu de résultats final.

Renvoie

Si la fonction ne renvoie pas NULL, le type de données de la valeur renvoyée est NUMBER.

Notes sur l’utilisation

  • Lorsque cette fonction est appelée en tant que fonction de fenêtre avec une clause ORDER BY, vous devez spécifier un cadre de fenêtre. Si vous ne spécifiez pas de cadre de fenêtre, le cadre par défaut suivant est utilisé :

    RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

    Pour plus d’informations sur les cadres de fenêtre, y compris la syntaxe, les notes sur l’utilisation et les exemples, voir Syntaxe et utilisation des fonctions de fenêtre.

Exemples

Les exemples de cette section montrent comment utiliser la fonction COUNT_IF.

Les instructions suivantes configurent une table à utiliser dans les exemples :

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

L’exemple suivant valide TRUE pour la condition, qui renvoie le nombre de toutes les lignes de la table :

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

L’exemple suivant renvoie le nombre de lignes où la valeur dans J_COL est supérieure à la valeur dans I_COL :

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

Notez que dans l’exemple ci-dessus, le nombre n’inclut pas les lignes avec des valeurs NULL. Comme expliqué dans Logique ternaire, lorsqu’une opérande pour un opérateur de comparaison est NULL, le résultat est NULL, ce qui ne satisfait pas la condition spécifiée par COUNT_IF.

L’exemple suivant renvoie le nombre de lignes qui ne contiennent aucune valeur NULL.

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