Catégories :

Fonctions d’agrégation (Bitwise) , Fonctions de fenêtre (General) , Fonctions d’expression au niveau du bit

BITXOR_AGG

Renvoie la valeur XOR au niveau du bit de tous les enregistrements numériques non NULL dans un groupe.

Dans chaque position de bit, si un nombre pair de lignes ont ce bit défini sur 1, alors la fonction renvoie 0 pour ce bit et si un nombre impair de lignes ont ce bit défini sur 1, alors la fonction renvoie 1 pour ce bit.

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

Alias :

BITXORAGG , BIT_XOR_AGG, BIT_XORAGG

Voir aussi :

BITAND_AGG , BITOR_AGG

BITXOR

Syntaxe

Fonction d’agrégation

BITXOR_AGG( [ DISTINCT ] <expr1> )
Copy

Fonction de fenêtre

BITXOR_AGG( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Copy

Arguments

expr1

Cette expression doit correspondre à une valeur numérique ou une valeur d’un type de données pouvant être converti en valeur numérique.

expr2

Cette expression est utilisée pour regrouper les lignes dans des partitions.

Renvoie

Le type de données de la valeur renvoyée est NUMBER(38, 0).

Notes sur l’utilisation

  • Les valeurs numériques sont agrégées au type de données INTEGER le plus proche. Les valeurs décimales et à virgule flottante sont arrondies à l’entier le plus proche avant l’agrégation.

  • L’agrégation d’une colonne de caractères/texte (type de données VARCHAR, CHAR, STRING, etc.) transforme implicitement les valeurs d’entrée en FLOAT, puis arrondit les valeurs à l’entier le plus proche. Si la conversion n’est pas possible, la valeur est traitée comme NULL.

  • Le mot clé DISTINCT peut être spécifié pour ces fonctions, mais il n’a aucun effet.

  • Lorsque cette fonction est appelée en tant que fonction de fenêtre, elle ne prend pas en charge :

    • Une clause ORDER BY dans la clause OVER.

    • Cadres de fenêtre explicites.

Exemples

Créer la table et charger les données :

CREATE OR REPLACE TABLE bitwise_example
  (k INT, d DECIMAL(10,5), s1 VARCHAR(10), s2 VARCHAR(10));

INSERT INTO bitwise_example VALUES
  (15, 1.1, '12','one'),
  (26, 2.9, '10','two'),
  (12, 7.1, '7.9','two'),
  (14, NULL, NULL,'null'),
  (8, NULL, NULL, 'null'),
  (NULL, 9.1, '14','nine');
Copy

Afficher les données :

SELECT k AS k_col, d AS d_col, s1, s2
  FROM bitwise_example
  ORDER BY k_col;
Copy
+-------+---------+------+------+
| K_COL |   D_COL | S1   | S2   |
|-------+---------+------+------|
|     8 |    NULL | NULL | null |
|    12 | 7.10000 | 7.9  | two  |
|    14 |    NULL | NULL | null |
|    15 | 1.10000 | 12   | one  |
|    26 | 2.90000 | 10   | two  |
|  NULL | 9.10000 | 14   | nine |
+-------+---------+------+------+

Interroger les données :

SELECT BITXOR_AGG(k), 
       BITXOR_AGG(d), 
       BITXOR_AGG(s1) 
  FROM bitwise_example;
Copy
+---------------+---------------+----------------+
| BITXOR_AGG(K) | BITXOR_AGG(D) | BITXOR_AGG(S1) |
|---------------+---------------+----------------|
|            31 |            12 |              0 |
+---------------+---------------+----------------+

Interroger les données et utiliser une clause GROUPBY :

SELECT s2, 
       BITXOR_AGG(k), 
       BITXOR_AGG(d) 
  FROM bitwise_example 
  GROUP BY s2
  ORDER BY 3;
Copy
+------+---------------+---------------+
| S2   | BITXOR_AGG(K) | BITXOR_AGG(D) |
|------+---------------+---------------|
| one  |            15 |             1 |
| two  |            22 |             4 |
| nine |          NULL |             9 |
| null |             6 |          NULL |
+------+---------------+---------------+

Si vous passez cette fonction à des chaînes qui ne peuvent pas être converties en valeurs NUMBER, une erreur est retournée :

SELECT BITXOR_AGG(s2) FROM bitwise_example;
Copy
100038 (22018): Numeric value 'one' is not recognized