BOOLXOR_AGG¶
如果组中正好有一条布尔记录的值为 TRUE,则返回 TRUE。
如果组内的所有记录均为 NULL,或者该组为空,则函数返回 NULL。
- 另请参阅:
语法¶
聚合函数
BOOLXOR_AGG( <expr> )
窗口函数
BOOLXOR_AGG( <expr> ) OVER ( [ PARTITION BY <partition_expr> ] )
实参¶
expr输入表达式必须是不能计算为布尔或不能转换为布尔的表达式。
partition_expr此列或表达式指定如何将输入分隔到分区(子窗口)中。
返回¶
This function returns a value of type BOOLEAN.
使用说明¶
Numeric values are converted to
TRUEif they are non-zero.String and binary values aren't supported because they can't be converted to Boolean values.
当此函数作为窗口函数调用时,它不支持:
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