BITXOR_AGG¶
返回组中所有非 NULL 数字记录按位进行 XOR 运算的值。
在每个位的位置中,如果有偶数行将该位设置为 1,则函数对该位返回 0;如果有奇数行将该位设置为 1,则函数对该位返回 1。
如果组内的所有记录均为 NULL,或者该组为空,则函数返回 NULL。
- 别名:
BITXORAGG、BIT_XOR_AGG、BIT_XORAGG
- 另请参阅:
语法¶
聚合函数
BITXOR_AGG( [ DISTINCT ] <expr1> )
窗口函数
BITXOR_AGG( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
实参¶
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');
显示数据:
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 | +-------+---------+------+------+
查询数据:
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 | +---------------+---------------+----------------+
查询数据并使用 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 | +------+---------------+---------------+
如果传递无法转换为数字的此函数字符串,则会收到错误:
select bitxor_agg(s2) from bitwise_example;100038 (22018): Numeric value 'one' is not recognized