- 类别:
/sql-reference/functions-aggregation`(布尔)、:doc:/sql-reference/functions-analytic`、条件表达式函数
BOOLXOR_AGG¶
如果组中正好有一条布尔记录的值为 TRUE,则返回 TRUE。
如果组内的所有记录均为 NULL,或者该组为空,则函数返回 NULL。
- 另请参阅:
语法¶
聚合函数
BOOLXOR_AGG( <expr> )
窗口函数
BOOLXOR_AGG( <expr> ) OVER ( [ PARTITION BY <partition_expr> ] )
实参¶
expr
输入表达式必须是不能计算为布尔或不能转换为布尔的表达式。
partition_expr
此列或表达式指定如何将输入分隔到分区(子窗口)中。
返回¶
返回值的数据类型是 BOOLEAN。
使用说明¶
如果数值为非零,则将其转换为
TRUE
。不支持字符/文本类型,因为它们无法转换为布尔。
用作窗口函数时:
此函数不支持:
OVER 子句中的 ORDER BY 分子句。
窗口框架。
示例¶
以下示例显示,当输入值之一恰好为 true 时,boolxor_agg 返回 true。
创建并加载表:
create or replace table test_boolean_agg( id integer, c1 boolean, c2 boolean, c3 boolean, c4 boolean ); insert into test_boolean_agg (id, c1, c2, c3, c4) values (1, true, true, true, false), (2, true, false, false, false), (3, true, true, false, false), (4, true, false, false, false);显示数据:
select * from test_boolean_agg; +----+------+-------+-------+-------+ | ID | C1 | C2 | C3 | C4 | |----+------+-------+-------+-------| | 1 | True | True | True | False | | 2 | True | False | False | False | | 3 | True | True | False | False | | 4 | True | False | False | False | +----+------+-------+-------+-------+查询数据:
select boolxor_agg(c1), boolxor_agg(c2), boolxor_agg(c3), boolxor_agg(c4) from test_boolean_agg; +-----------------+-----------------+-----------------+-----------------+ | BOOLXOR_AGG(C1) | BOOLXOR_AGG(C2) | BOOLXOR_AGG(C3) | BOOLXOR_AGG(C4) | |-----------------+-----------------+-----------------+-----------------| | False | False | True | False | +-----------------+-----------------+-----------------+-----------------+
窗口函数
此示例与上一个示例类似,但它将用法显示为窗口函数,其中输入行分为两个分区(一个表示 IDs 大于 0,一个表示 IDs 小于或等于 0)。其他数据已添加到表中。
向表中添加行:
insert into test_boolean_agg (id, c1, c2, c3, c4) values (-4, false, false, false, true), (-3, false, true, true, true), (-2, false, false, true, true), (-1, false, true, true, true);显示数据:
select * from test_boolean_agg order by id; +----+-------+-------+-------+-------+ | ID | C1 | C2 | C3 | C4 | |----+-------+-------+-------+-------| | -4 | False | False | False | True | | -3 | False | True | True | True | | -2 | False | False | True | True | | -1 | False | True | True | True | | 1 | True | True | True | False | | 2 | True | False | False | False | | 3 | True | True | False | False | | 4 | True | False | False | False | +----+-------+-------+-------+-------+查询数据:
select id, boolxor_agg(c1) OVER (PARTITION BY (id > 0)), boolxor_agg(c2) OVER (PARTITION BY (id > 0)), boolxor_agg(c3) OVER (PARTITION BY (id > 0)), boolxor_agg(c4) OVER (PARTITION BY (id > 0)) from test_boolean_agg order by id; +----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+ | ID | BOOLXOR_AGG(C1) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C2) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C3) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C4) OVER (PARTITION BY (ID > 0)) | |----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------| | -4 | False | False | False | False | | -3 | False | False | False | False | | -2 | False | False | False | False | | -1 | False | False | False | False | | 1 | False | False | True | False | | 2 | False | False | True | False | | 3 | False | False | True | False | | 4 | False | False | True | False | +----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+
错误示例
如果传递此函数的字符串无法转换为布尔,则该函数将给出错误:
select boolxor_agg('invalid type');
100037 (22018): Boolean value 'invalid_type' is not recognized