メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

ビット単位の集計関数

Amazon Redshift は以下のビット単位の集計関数をサポートします。

  • BIT_AND

  • BIT_OR

  • BOOL_AND

  • BOOL_OR

BIT_AND および BIT_OR

BIT_AND および BIT_OR 関数は、1 つの整数列または式のすべての値でビット単位の AND および OR 演算を実行します。これらの関数は、式の整数値ごとに対応する各バイナリ値の各ビットを集計します。

値のすべてにおいてどのビットにも 1 が設定されていない場合、BIT_AND 関数は 0 の結果を返します。値のすべてにおいて 1 つ以上のビットに 1 が設定されている場合、関数は整数値を返します。この整数はこれらのビットのバイナリ値に対応する数値です。

例えば、テーブルは列に 4 つの整数値を含みます (3、7、10、および 22)。これらの整数は、次のようにバイナリで表されます。

整数 バイナリ値
3 11
7 111
10 1010
22 10110

このデータセットの BIT_AND 演算は、すべてのビットで最後から 2 番目の位置にのみ 1 が設定されていることが分かります。結果は 00000010 のバイナリ値であり、整数値 2 を表します。そのため、BIT_AND 関数は 2 を返します。

BIT_OR 関数を整数値の同じセットに適用する場合、この演算は各位置に 1 が検出された任意の値を探します。この場合、1 が少なくとも 1 つの値の最後の 5 つの位置に存在し、00011111 のバイナリ結果を生成します。そのため、関数は 31 (または 16 + 8 + 4 + 2 + 1) を返します。

BOOL_AND および BOOL_OR

BOOL_AND および BOOL_OR 関数は、1 つのブールまたは整数の列または式で実行されます。これらの関数は、同様のロジックを BIT_AND および BIT_OR 関数に適用します。これらの関数では、戻り値の型はブール値 (true または false) です。

  • セットの値がすべて true の場合、BOOL_AND 関数は true (t) を返します。値がすべて false の場合、関数は false (f) を返します。

  • セットの値のいずれかが true の場合、BOOL_OR 関数は true (t) を返します。セットのどの値も true ではない場合、関数は false (f) を返します。

ビット単位の集計の NULL

ビット単位関数が Null 使用可能な列に適用されている場合、NULL 値は関数の結果が計算される前に削除されます。集計を満たす行がない場合、ビット単位関数は NULL を返します。同じ動作が標準の集計関数に適用されます。以下に例を示します。

Copy
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 を使用しないでください。