类别:

聚合函数 (按位)、窗口函数 (常规)、按位表达式函数

BITXOR_AGG

返回组中所有非 NULL 数字记录按位进行 XOR 运算的值。

在每个位的位置中,如果有偶数行将该位设置为 1,则函数对该位返回 0;如果有奇数行将该位设置为 1,则函数对该位返回 1。

如果组内的所有记录均为 NULL,或者该组为空,则函数返回 NULL。

别名:

BITXORAGG、BIT_XOR_AGG、BIT_XORAGG

另请参阅:

BITAND_AGGBITOR_AGG

BITXOR

语法

聚合函数

BITXOR_AGG( [ DISTINCT ] <expr1> )
Copy

窗口函数

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

实参

expr1

输入表达式必须是可以计算为数字或转换为数字的表达式。

expr2

此表达式用于对分区中的行进行分组。

返回

返回值的数据类型是 NUMERIC(38, 0)。

使用说明

  • 数值聚合到最接近的整数数据类型。小数和浮点值在聚合之前四舍五入到最接近的整数。

  • 聚合字符/文本列(数据类型 VARCHAR、CHAR、STRING 等)会将输入值隐式转换为 FLOAT,然后将值四舍五入到最接近的整数。如果无法进行转换,则该值将被视为 NULL。

  • 用作窗口函数时:

    • 此函数不支持:

      • OVER() 子句中的 ORDER BY 分子句。

      • 窗口框架。

示例

创建表并加载数据:

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

显示数据:

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

查询数据:

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

查询数据并使用 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 |
+------+---------------+---------------+
Copy

如果传递无法转换为数字的此函数字符串,则会收到错误:

select bitxor_agg(s2) from bitwise_example;
Copy
100038 (22018): Numeric value 'one' is not recognized
Copy
语言: 中文