位元彙整函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

位元彙整函數

位元彙總函數會運算位元操作,以執行整數欄以及可轉換或四捨五入為整數值的彙總。

在位元彙總NULLs中使用

當您將位元函數套用至可空值的資料欄時,任何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範例資料庫為基礎。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資料表的新版本是以不同的方式建置。在此新版本中,單一整數欄定義 (以二進位格式) 每一個使用者喜歡或不喜歡的八種活動。在這種設計中,每個位置代表一種類型的事件。喜歡所有八種類型的使用者將全部八位設定為 1 (如下表的第一列)。如果使用者不喜歡任何活動,則八個位元全部設為 0 (請看第二列)。接下來的第三列表示只喜歡運動和爵士樂的使用者。

USER 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

在資料庫資料表中,這些二進位值可以整數形式存放在單一資料LIKES欄中,如下所示。

使用者 二進位值 儲存的值 (整數)
使用者 1 11111111 255
使用者 2 00000000 0
使用者 3 10100000 160