Catégories :

Fonctions d’agrégation (Booléen) , Fonctions de la fenêtre , Fonctions d’expressions conditionnelles

BOOLXOR_AGG

Renvoie la valeur logique (booléenne) XOR de tous les enregistrements booléens non NULL d’un groupe.

BOOLXOR_AGG renvoie TRUE si et seulement si exactement un enregistrement dans le groupe correspond à TRUE. Cela diffère d’un XOR cumulatif sur les enregistrements.

Si tous les enregistrements du groupe sont NULL ou si le groupe est vide, la fonction renvoie NULL.

Voir aussi :

BOOLXOR , BOOLAND_AGG , BOOLOR_AGG

Syntaxe

Fonction d’agrégation

BOOLXOR_AGG( <expr> )

Fonction de fenêtre

BOOLXOR_AGG( <expr> ) OVER ( [ PARTITION BY <partition_expr> ] )

Arguments

expr

L’expression d’entrée doit être une expression pouvant être évaluée en booléen ou convertie en booléen.

expr_partition

Cette colonne ou expression spécifie comment séparer l’entrée en partitions (sous-fenêtres).

Renvoie

Le type de données de la valeur renvoyée est BOOLEAN.

Notes sur l’utilisation

  • Les valeurs numériques sont converties en TRUE si elles sont différentes de zéro.

  • Les types caractères/textes ne sont pas pris en charge, car ils ne peuvent pas être convertis en booléens.

  • Lorsqu’il est utilisé comme une fonction de fenêtre :

    • Cette fonction ne prend pas en charge :

      • Sous-clause ORDER BY dans la clause OVER.

      • Cadres de fenêtre.

Exemples

L’exemple suivant montre que boolxor_agg renvoie true lorsque l’une des valeurs en entrée est true.

Créer et charger la table :

create or replace table test_boolean_agg(
    id integer,
    c1 boolean, 
    c2 boolean,
    c3 boolean,
    c4 boolean
    );

insert into test_boolean_agg (id, c1, c2, c3, c4) values 
    (1, true, true,  true,  false),
    (2, true, false, false, false),
    (3, true, true,  false, false),
    (4, true, false, false, false);

Afficher les données :

select * from test_boolean_agg;
+----+------+-------+-------+-------+
| ID | C1   | C2    | C3    | C4    |
|----+------+-------+-------+-------|
|  1 | True | True  | True  | False |
|  2 | True | False | False | False |
|  3 | True | True  | False | False |
|  4 | True | False | False | False |
+----+------+-------+-------+-------+

Interroger les données :

select boolxor_agg(c1), boolxor_agg(c2), boolxor_agg(c3), boolxor_agg(c4)
    from test_boolean_agg;
+-----------------+-----------------+-----------------+-----------------+
| BOOLXOR_AGG(C1) | BOOLXOR_AGG(C2) | BOOLXOR_AGG(C3) | BOOLXOR_AGG(C4) |
|-----------------+-----------------+-----------------+-----------------|
| False           | False           | True            | False           |
+-----------------+-----------------+-----------------+-----------------+

Fonction de fenêtre

Cet exemple est similaire à l’exemple précédent, mais montre l’utilisation en tant que fonction de fenêtre, avec les lignes d’entrée divisées en deux partitions (une pour des IDs supérieurs à 0 et l’autre pour des IDs inférieurs ou égaux à 0). Des données supplémentaires ont été ajoutées à la table.

Ajouter des lignes à la table :

insert into test_boolean_agg (id, c1, c2, c3, c4) values
    (-4, false, false, false, true),
    (-3, false, true,  true,  true),
    (-2, false, false, true,  true),
    (-1, false, true,  true,  true);

Afficher les données :

select * 
    from test_boolean_agg
    order by id;
+----+-------+-------+-------+-------+
| ID | C1    | C2    | C3    | C4    |
|----+-------+-------+-------+-------|
| -4 | False | False | False | True  |
| -3 | False | True  | True  | True  |
| -2 | False | False | True  | True  |
| -1 | False | True  | True  | True  |
|  1 | True  | True  | True  | False |
|  2 | True  | False | False | False |
|  3 | True  | True  | False | False |
|  4 | True  | False | False | False |
+----+-------+-------+-------+-------+

Interroger les données :

select 
      id, 
      boolxor_agg(c1) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c2) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c3) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c4) OVER (PARTITION BY (id > 0))
    from test_boolean_agg
    order by id;
+----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+
| ID | BOOLXOR_AGG(C1) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C2) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C3) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C4) OVER (PARTITION BY (ID > 0)) |
|----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------|
| -4 | False                                        | False                                        | False                                        | False                                        |
| -3 | False                                        | False                                        | False                                        | False                                        |
| -2 | False                                        | False                                        | False                                        | False                                        |
| -1 | False                                        | False                                        | False                                        | False                                        |
|  1 | False                                        | False                                        | True                                         | False                                        |
|  2 | False                                        | False                                        | True                                         | False                                        |
|  3 | False                                        | False                                        | True                                         | False                                        |
|  4 | False                                        | False                                        | True                                         | False                                        |
+----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+

Exemple d’erreur

Si cette fonction reçoit des chaînes qui ne peuvent pas être converties en booléen, la fonction renverra une erreur :

select boolxor_agg('invalid type');

100037 (22018): Boolean value 'invalid_type' is not recognized