Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

按位聚合函数

Amazon Redshift 支持以下按位聚合函数:

  • BIT_AND

  • BIT_OR

  • BOOL_AND

  • BOOL_OR

BIT_AND 和 BIT_OR

BIT_AND 和 BIT_OR 函数对单个整数列或表达式中的所有值运行按位 AND 和 OR 操作。这些函数聚合与表达式中的每个整数值对应的每个二进制值的每个位。

如果所有值中没有设置为 1 的位,则 BIT_AND 函数将返回结果 0。如果所有值中的一个或多个位设置为 1,该函数返回一个整数值。此整数是对应于这些位的二进制值的数字。

例如,表中的一个列包含 4 个整数值:3、7、10 和 22。这些整数用二进制格式表示,如下所示:

整数 二进制值
3 11
7 111
10 1010
22 10110

针对此数据集的 BIT_AND 操作发现所有位仅在倒数第二的位置设置为 1。结果为 00000010 的二进制值,它表示整数值 2;因此,BIT_AND 函数返回 2

如果将 BIT_OR 函数应用于同一组整数值,则操作将在每个位置寻找已找到 1任何 值。在这种情况下,1 存在于至少一个值的后 5 个位置,从而生成二进制结果 00011111;因此,该函数将返回 31(或 16 + 8 + 4 + 2 + 1)。

BOOL_AND 和 BOOL_OR

BOOL_AND 和 BOOL_OR 函数运行于一个布尔或整数列或者表达式上。这些函数将类似逻辑应用于 BIT_AND 和 BIT_OR 函数。对于这些函数,返回类型为布尔值(truefalse):

  • 如果集合中的所有值为 true,则 BOOL_AND 函数返回 true (t)。如果任何值为 false,该函数返回 false (f)。

  • 如果集合中的任一值为 true,则 BOOL_OR 函数返回 true (t)。如果集合中没有值为 true,则该函数返回 false (f)。

按位聚合中的 NULL

在将按位函数应用于可为 null 的列时,在计算函数结果之前将消除任何 NULL 值。如果没有行符合聚合资格,则按位函数将返回 NULL。相同的行为适用于常规的聚合函数。例如:

select sum(venueseats), bit_and(venueseats) from venue where venueseats is null; sum | bit_and ------+--------- null | null (1 row)

DISTINCT 支持按位聚合

类似于其他聚合函数,按位函数也支持 DISTINCT 关键字。但是,将 DISTINCT 用于这些函数不会影响结果。值的第一个实例足以满足按位 AND 或 OR 操作,如果重复值出现在正在计算的表达式中,也不会有什么差异。由于 DISTINCT 处理可能会产生一些查询执行开销,因此不要将 DISTINCT 用于这些函数。