- Catégories :
Fonctions d’agrégation (Bitwise) , Fonctions de la fenêtre (Général) , 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 :
Syntaxe¶
Fonction d’agrégation
BITXOR_AGG( [ DISTINCT ] <expr1> )
Fonction de fenêtre
BITXOR_AGG( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Arguments¶
expr1
L’expression d’entrée doit être une expression pouvant être évaluée en nombre ou convertie en nombre.
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 NUMERIC (38, 0).
Notes sur l’utilisation¶
Les valeurs numériques sont agrégées au type de données entier 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.
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¶
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');
Afficher les données :
SELECT k AS k_col, d AS d_col, s1, s2 FROM bitwise_example ORDER BY k_col; +-------+---------+------+------+ | 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; +---------------+---------------+----------------+ | BITXOR_AGG(K) | BITXOR_AGG(D) | BITXOR_AGG(S1) | |---------------+---------------+----------------| | 31 | 12 | 0 | +---------------+---------------+----------------+
Interroger les données et utiliser un GROUP BY
:
select s2, bitxor_agg(k), bitxor_agg(d) from bitwise_example group by s2 order by 3; +------+---------------+---------------+ | S2 | BITXOR_AGG(K) | BITXOR_AGG(D) | |------+---------------+---------------| | one | 15 | 1 | | two | 22 | 4 | | nine | NULL | 9 | | null | 6 | NULL | +------+---------------+---------------+
Si vous transmettez cette fonction à des chaînes qui ne peuvent pas être converties en nombres, vous obtiendrez une erreur :
select bitxor_agg(s2) from bitwise_example;100038 (22018): Numeric value 'one' is not recognized