位元彙整函數 - 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 範例資料庫為基礎。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 (請看第二列)。接下來的第三列表示只喜歡運動和爵士樂的使用者。

運動 戲劇 爵士樂 歌劇 搖滾 拉斯維加斯 百老匯 古典
使用者 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