Catégories :

Fonctions d’agrégation (Général) , Fonctions de la fenêtre (Général, Cadre 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 d’informations sur la syntaxe window_frame , voir Syntaxe et utilisation du cadre 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 ceci est distinct de toute clause ORDER BY pour classer l’ensemble 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 :

    • Si une sous-clause ORDER BY est utilisée à l’intérieur de la clause OVER(), un cadre de fenêtre doit être utilisé. Si aucun cadre de fenêtre n’est spécifié, la valeur par défaut est un cadre de fenêtre cumulatif :

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      Pour plus d’informations sur les cadres de fenêtre, y compris la syntaxe et des exemples, voir Syntaxe et utilisation du cadre de fenêtre. Pour plus d’informations sur les cadres de fenêtre implicites, voir Notes sur l’utilisation du cadre 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 |
+---------------------------------------------------+