类别:

/sql-reference/functions-aggregation`(布尔)、:doc:/sql-reference/functions-analytic`、条件表达式函数

BOOLXOR_AGG

如果组中正好有一条布尔记录的值为 TRUE,则返回 TRUE。

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

另请参阅:

BOOLXORBOOLAND_AGGBOOLOR_AGG

语法

聚合函数

BOOLXOR_AGG( <expr> )
Copy

窗口函数

BOOLXOR_AGG( <expr> ) OVER ( [ PARTITION BY <partition_expr> ] )
Copy

实参

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

显示数据:

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

查询数据:

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

窗口函数

此示例与上一个示例类似,但它将用法显示为窗口函数,其中输入行分为两个分区(一个表示 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);
Copy

显示数据:

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

查询数据:

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

错误示例

如果传递此函数的字符串无法转换为布尔,则该函数将给出错误:

select boolxor_agg('invalid type');

100037 (22018): Boolean value 'invalid_type' is not recognized
Copy
语言: 中文