Funções agregadas bit-wise
As funções agregadas bit-wise computam operações de bits para executar a agregação de colunas e colunas de inteiros que podem ser convertidas ou arredondadas para valores inteiros.
Tópicos
Usar NULLs em agregações bit a bit
Quando você aplica uma função bit a bit a uma coluna que pode ser nula, quaisquer valores NULL são eliminados antes que o resultado da função seja calculado. Se nenhuma linha se qualificar para agregação, a função bit-wise retorna NULL. O mesmo comportamento se aplica a funções agregadas regulares. Veja um exemplo a seguir.
select sum(venueseats), bit_and(venueseats) from venue where venueseats is null; sum | bit_and ------+--------- null | null (1 row)
Compatibilidade DISTINCT para agregações bit-wise
Assim como as outras funções de agregação, as funções bit a bit suportam a palavra-chave DISTINCT.
No entanto, o uso de DISTINCT com essas funções não tem qualquer impacto nos resultados. A primeira instância de um valor é suficiente para satisfazer operações AND ou OR bit a bit. Não faz diferença se valores duplicados estiverem presentes na expressão sendo avaliada.
Como o processamento DISTINCT provavelmente incorrerá em alguma sobrecarga na execução da consulta, recomendamos que você não use DISTINCT com funções bit a bit.
Exemplos de visão geral para funções bit a bit
A seguir, você pode encontrar alguns exemplos de visão geral que demonstram como trabalhar com as funções bit a bit. Você também pode encontrar exemplos de código específicos com cada descrição de função.
Exemplos para as funções bit a bit são baseados no banco de dados de exemplo TICKIT. A tabela USERS no banco de dados de amostra TICKIT contém várias colunas booleanas que indicam se cada usuário reconhecidamente gosta de diferentes tipos de eventos, tais como esportes, teatro, ópera, etc. Veja a seguir um exemplo.
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
Suponha que uma nova versão da tabela USERS é criada de uma maneira diferente. Nesta nova versão, uma única coluna inteira que define (na forma binária) oito tipos de eventos que cada usuário gosta ou não gosta. Neste experimento, cada posição de bit representa um tipo de evento. Um usuário que goste de todos os oito tipos tem os oito bits definidos como 1 (como na primeira linha da tabela a seguir). Um usuário que não gosta de nenhum desses eventos tem todos os oito bits definidos como 0 (consulte a segunda linha). Um usuário que gosta apenas de esportes e jazz é representado na terceira linha a seguir.
ESPORTES | TEATRO | JAZZ | ÓPERA | ROCK | VEGAS | BROADWAY | CLÁSSICA | |
---|---|---|---|---|---|---|---|---|
Usuário 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Usuário 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Usuário 3 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Na tabela do banco de dados, esses valores binários podem ser armazenados em uma única coluna LIKES como inteiros, conforme mostrado a seguir.
Usuário | Valor binário | Valor armazenados (inteiro) |
---|---|---|
Usuário 1 | 11111111 | 255 |
Usuário 2 | 00000000 | 0 |
Usuário 3 | 10100000 | 160 |