BIT_AND 関数 - Amazon Redshift

BIT_AND 関数

BIT_AND 関数は、単一の整数列または式内のすべての値に対してビット単位の AND 演算を実行します。この関数は、式の整数値ごとに対応する各バイナリ値の各ビットを集計します。

値のすべてにおいてどのビットにも 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_AND ( [DISTINCT | ALL] expression )

引数

expression

関数の対象となる列または式。この式には、INT、INT2、または INT8 のデータ型がある必要があります。関数は同等の INT、INT2、または INT8 のデータ型を返します。

DISTINCT | ALL

引数 DISTINCT を指定すると、この関数は結果を計算する前に指定された式から重複した値をすべて削除します。引数 ALL 指定すると、この関数は重複する値をすべて保持します。ALL がデフォルトです。「ビット単位の集計の 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

有効な企業情報が整数列に保存されるとすると、ビット単位関数を使用してこの情報を抽出および集計できます。次のクエリは USERLIKES と呼ばれるテーブルの LIKES 列に BIT_AND 関数を適用し、CITY 列による結果をグループ化します。

select city, bit_and(likes) from userlikes group by city order by city; city | bit_and --------------+--------- Los Angeles | 0 Sacramento | 0 San Francisco | 0 San Jose | 64 Santa Barbara | 192 (5 rows)

これらの結果は次のように解釈できます。

  • サンタバーバラの整数値 192 は、バイナリ値 11000000 に変換されます。つまり、この都市のすべてのユーザーがスポーツと演劇を好きですが、すべてのユーザーがその他のタイプのイベントを好きというわけではありません。

  • 整数 6401000000 に変換するため、サンノゼのユーザーの場合、全員が好きなイベントタイプは演劇のみです。

  • 他の 3 都市の 0 の値は、「好き」と回答したユーザーがこれらの都市で 1 人もいないことを示します。