Catégories :

Fonctions d’agrégation (Bitwise) , Fonctions de la fenêtre (Général) , Fonctions d’expression au niveau du bit

BITAND_AGG

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

Pour chaque position de bit, si le bit est défini sur 1 sur toutes les lignes, il est défini sur 1 dans le résultat. Si ce bit est défini sur zéro dans les lignes, le résultat est zéro.

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

Alias :

BITANDAGG , BIT_AND_AGG , BIT_ANDAGG

Voir aussi :

BITOR_AGG , BITXOR_AGG ,

BITAND

Syntaxe

Fonction d’agrégation

BITAND_AGG( <expr1> )
Copy

Fonction de fenêtre

BITAND_AGG( <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.

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

  • 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');
Copy

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

Interroger les données :

select bitand_agg(k), bitand_agg(d), bitand_agg(s1) from bitwise_example;
+---------------+---------------+----------------+
| BITAND_AGG(K) | BITAND_AGG(D) | BITAND_AGG(S1) |
|---------------+---------------+----------------|
|             8 |             1 |              8 |
+---------------+---------------+----------------+
Copy

Interroger les données et utiliser un GROUP BY :

select s2, bitand_agg(k), bitand_agg(d) from bitwise_example group by s2
    order by 3;
+------+---------------+---------------+
| S2   | BITAND_AGG(K) | BITAND_AGG(D) |
|------+---------------+---------------|
| one  |            15 |             1 |
| two  |             8 |             3 |
| nine |          NULL |             9 |
| null |             8 |          NULL |
+------+---------------+---------------+
Copy

Si vous transmettez cette fonction à des chaînes qui ne peuvent pas être converties en nombres, vous obtiendrez une erreur :

select bitand_agg(s2) from bitwise_example;
Copy
100038 (22018): Numeric value 'one' is not recognized
Copy