本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
位元彙整函數
位元彙總函數會運算位元操作,以執行整數欄以及可轉換或四捨五入為整數值的彙總。
在位元彙總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 |