ビット単位の集計関数 - Amazon Redshift

ビット単位の集計関数

ビット単位の集計関数は、ビット演算を計算し、整数値に変換または丸めることができる整数の列と列の集計を実行します。

ビット単位の集計の 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 を使用しないでください。

ビット単位関数の例の概要

このセクションでは、ビット単位関数の例について説明します。

TICKIT サンプルデータベースの USERS テーブルには複数のブール列が含まれ、ユーザーごとに異なるイベントのタイプ (スポーツ、演劇、オペラなど) を好きかどうかを示しています。(例:

select userid, username, lastname, city, state, likesports, liketheatre from users limit 10; userid | username | lastname | city | state | likesports | liketheatre -\-\-\-\-\-\-\-+-\-\-\-\-\-\-\-\-\-+-\-\-\-\-\-\-\-\-\-\-+-\-\-\-\-\-\-\-\-\-\-\-\-\-+-\-\-\-\-\-\-+-\-\-\-\-\-\-\-\-\-\-\-+-\-\-\-\-\-\-\-\-\-\-\-\- 1 | JSG99FHE | Taylor | Kent | WA | t | t 9 | MSD36KVR | Watkins | Port Orford | MD | t | f

USERS テーブルの新しいバージョンが、各ユーザーが好きまたは嫌いな 8 種類のイベントのタイプを (バイナリ形式で) 定義する 1 つの整数列を使って、異なる方法で構築されたとします。このデザインで、各ビットの位置はイベントのタイプを示し、8 種類すべてのタイプが好きなユーザーはすべてのビットに 1 が設定されます (以下のテーブルの 1 行目)。これらのどのイベントも好きではないユーザーは、8 ビットすべてに 0 が設定されます (2 行目を参照)。スポーツとジャズのみが好きなユーザーを 3 行目に示しています。

SPORTS THEATRE JAZZ OPERA ROCK VEGAS BROADWAY CLASSICAL
ユーザー 1 1 1 1 1 1 1 1 1
ユーザー 2 0 0 0 0 0 0 0 0
ユーザー 3 1 0 1 0 0 0 0 0

データベーステーブルでこれらのバイナリ値は、整数として 1 つの LIKES 列に保存される場合があります。

ユーザー バイナリ値 保存値 (整数)
ユーザー 1 11111111 255
ユーザー 2 00000000 0
ユーザー 3 10100000 160