位元彙整函數 - 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