本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
位元彙整函數
位元彙總函數會運算位元操作,以執行整數欄以及可轉換或四捨五入為整數值的彙總。
在位元彙整中使用 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 (請看第二列)。接下來的第三列表示只喜歡運動和爵士樂的使用者。
USER | 運動 | 戲劇 | 爵士樂 | 歌劇 | 搖滾 | 拉斯維加斯 | 百老匯 | 古典 |
---|---|---|---|---|---|---|---|---|
使用者 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 |