Funciones de agregación bit a bit - Amazon Redshift

Funciones de agregación bit a bit

Las funciones de agregación bit a bit calculan operaciones de bits para realizar la agregación de columnas de enteros y columnas que se pueden convertir o redondear a valores enteros.

Uso de NULL en agrupaciones bit a bit

Cuando se aplica una función bit a bit a una columna que puede contener valores nulos, se eliminan todos los valores NULL antes de que se calcule el resultado de la función. Si ninguna fila califica para la agregación, la función bit a bit devuelve NULL. El mismo comportamiento se aplica a funciones de agregación regulares. A continuación se muestra un ejemplo.

select sum(venueseats), bit_and(venueseats) from venue where venueseats is null; sum | bit_and ------+--------- null | null (1 row)

DISTINCT compatible con agregaciones bit a bit

Como otras funciones de agrupación, las funciones bit a bit son compatibles con la palabra clave DISTINCT.

No obstante, usar DISTINCT con estas funciones no influye en los resultados. La primera instancia de un valor es suficiente para satisfacer las operaciones bit a bit AND u OR. No importa si hay valores duplicados en la expresión que se evalúa.

Debido a que es probable que el procesamiento de DISTINCT genere algunos gastos de ejecución de consulta, se recomienda no usar DISTINCT con las funciones bit a bit.

Información general de ejemplos de funciones bit a bit

A continuación, encontrará algunos ejemplos de información general que demuestran cómo trabajar con las funciones bit a bit. También puede encontrar ejemplos de código específicos con cada descripción de la función.

Los ejemplos de las funciones bit a bit se basan en la base de datos de muestra TICKIT. La tabla USERS de la base de datos de muestra TICKIT tiene varias columnas con valores booleanos que indican si cada usuario es conocido por tener tipos diferentes de eventos, como deportes, teatro, ópera, etc. Ejemplo:

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

Suponga que el diseño de una versión nueva de la tabla USERS es diferente. En esta versión nueva, hay una única columna con valores enteros que define (en formato binario) ocho tipos de eventos que a cada usuario les gustan o les disgustan. En este diseño, cada posición de bit representa un tipo de evento. Un usuario al que le gustan los ocho tipos tiene los ocho bits establecidos en 1 (como en la primera fila de la siguiente tabla). Un usuario al que no le gusta ninguno de estos eventos tiene los ocho bits establecidos en 0 (vea la segunda fila). En la tercera fila que se encuentra a continuación, se representa a un usuario al que solo le gustan los deportes y el jazz.

DEPORTES TEATRO JAZZ OPERA ROCK LAS VEGAS BROADWAY CLÁSICO
Usuario 1 1 1 1 1 1 1 1 1
Usuario 2 0 0 0 0 0 0 0 0
Usuario 3 1 0 1 0 0 0 0 0

En la tabla de base de datos, estos valores binarios se pueden almacenar en una única columna denominada LIKES como valores enteros, como se muestra a continuación.

Usuario Valor binario Valor almacenado (entero)
Usuario 1 11111111 255
Usuario 2 00000000 0
Usuario 3 10100000 160