
Mejorando las consultas de Redshift con expresiones CASE WHEN

Introducción
Al usar el almacén de datos Redshift de Amazon, puede necesitar utilizar lógica condicional para consultar y transformar sus datos. La expresión ‘CASE WHEN’ ayuda a evaluar condiciones y devolver diferentes resultados dependiendo de si las condiciones son verdaderas o falsas.
En este artículo, profundizaremos en los fundamentos del uso de expresiones ‘CASE WHEN’ en Redshift SQL. También cubriremos la instrucción ELSE durante la discusión. Aprenderá la sintaxis, verá ejemplos y comprenderá casos de uso comunes. Al final, estará preparado para aprovechar esta lógica condicional esencial SQL en sus propias consultas de Redshift.
Sintaxis de CASE WHEN
La sintaxis general para una expresión CASE WHEN en Redshift es:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END
Así es como funciona:
- La palabra clave CASE señala el inicio de la expresión condicional
- Especifica una o más cláusulas WHEN que contienen una condición a evaluar
- Para la primera condición que evalúe a verdadera, se devuelve el resultado correspondiente THEN
- Si ninguna de las condiciones es verdadera, se devuelve el resultado por defecto ELSE default_result
- La palabra clave END señala el final de la expresión CASE
Veamos un ejemplo simple para ilustrar. Imagine una tabla “users” con columnas para id, name, y age. Para categorizar a los usuarios como ‘child’, ‘adult’, o ‘senior’ basado en la edad, puede usar:
SELECT id, name, CASE WHEN age < 18 THEN 'child' WHEN age < 65 THEN 'adult' ELSE 'senior' END AS age_category FROM users;
Esto evaluaría cada fila, verificando la edad del usuario y devolviendo la categoría de edad correspondiente.
Creando datos de ejemplo
Para demostrar ejemplos más complejos de CASE WHEN, primero creemos algunos datos de muestra con los que trabajar. Ejecute el siguiente SQL en Redshift para crear una tabla “orders”:
CREATE TABLE orders ( order_id INT, customer_id INT, order_date DATE, total DECIMAL(10,2), status VARCHAR(20) ); INSERT INTO orders VALUES (1, 101, '2023-01-15', 150.00, 'completed'), (2, 102, '2023-02-10', 75.50, 'pending'), (3, 101, '2023-03-01', 200.00, 'completed'), (4, 103, '2023-03-05', 120.00, 'cancelled'), (5, 102, '2023-04-12', 300.00, 'completed');
Esta simple expresión CASE crea una tabla de pedidos con algunos registros de muestra que ahora podemos ejecutar en expresiones CASE.
Usando CASE para derivar nuevas columnas
Las sentencias CASE se pueden usar para crear nuevas columnas en un conjunto de datos categorizando datos existentes. Cuando se organizan pedidos por monto total, una sentencia CASE puede establecer las reglas para cada grupo.
Pedidos por debajo de $100 son “Low Value” (bajo valor). El rango de pedidos entre $100 y $500 son “Medium Value” (valor medio). Pedidos por encima de $500 son “High Value” (alto valor). Puede categorizar fácilmente los datos en un conjunto de datos usando una expresión CASE, lo que ayuda con el análisis y la comprensión.
SELECT order_id, customer_id, total, CASE WHEN total < 100 THEN 'small' WHEN total < 250 THEN 'medium' ELSE 'large' END AS order_size FROM orders;
Esto devolvería:
order_id | customer_id | total | order_size ---------------------------------------------- 1 | 101 | 150.00 | medium 2 | 102 | 75.50 | small 3 | 101 | 200.00 | medium 4 | 103 | 120.00 | medium 5 | 102 | 300.00 | large
Agregando con CASE
Las expresiones CASE también son muy útiles dentro de funciones agregadas como SUM() y COUNT(). Por ejemplo, para contar el número de pedidos pequeños, medianos y grandes:
SELECT COUNT(CASE WHEN total < 100 THEN 1 END) AS small_orders, COUNT(CASE WHEN total >= 100 AND total < 250 THEN 1 END) AS medium_orders, COUNT(CASE WHEN total >= 250 THEN 1 END) AS large_orders FROM orders;
Esto devolvería:
small_orders | medium_orders | large_orders -------------------------------------------- 1 | 3 | 1
Dentro de cada COUNT(), el CASE devuelve 1 cuando se cumple la condición, que luego COUNT() suma.
CASE en cláusulas WHERE y HAVING
También puede usar expresiones CASE en cláusulas WHERE y HAVING para filtrar resultados basados en lógica condicional. Por ejemplo, para encontrar todos los clientes que han realizado un pedido ‘grande’:
SELECT DISTINCT customer_id FROM orders WHERE CASE WHEN total >= 250 THEN 'large' ELSE 'not large' END = 'large';
Esto devolvería al cliente 102, ya que es el único con un pedido ‘grande’ por encima de $250.
Manejo de valores NULL
Las expresiones CASE también son útiles para manejar valores NULL. Puede usar CASE para reemplazar NULLs con un valor por defecto, o para aplicar lógica diferente cuando un valor es NULL.
Por ejemplo, considere si nuestra tabla “orders” tuviera una columna “shipped_date” que podría ser NULL si el pedido aún no ha sido enviado. Para devolver ‘Not Shipped’ para estos pedidos:
SELECT order_id, status, CASE WHEN shipped_date IS NULL THEN 'Not Shipped' ELSE CAST(shipped_date AS VARCHAR(10)) END AS shipped FROM orders;
Esto verifica si shipped_date ES NULL, y si es así, devuelve ‘Not Shipped’. De lo contrario, convierte el shipped_date a una cadena para devolverlo. Aquí debemos notar que usar NVL o COALESCE puede ser una mejor opción.
Consejos para usar CASE WHEN
Aquí hay algunos consejos a tener en cuenta al usar expresiones CASE WHEN en Redshift:
- Las expresiones CASE pueden anidarse entre sí para una lógica más compleja
- La cláusula ELSE es opcional, y si se omite, NULL será devuelto si no se cumple ninguna condición
- Las expresiones CASE pueden usarse casi en cualquier lugar en una instrucción SQL, incluyendo las cláusulas SELECT, WHERE, HAVING, GROUP BY, y ORDER BY
- Tenga cuidado con los tipos de datos: los resultados de una expresión CASE deberán ser todos convertibles a un tipo de dato común
Resumen
La expresión CASE WHEN es una herramienta versátil para aplicar lógica condicional en consultas SQL de Redshift. Puede usarla para derivar nuevas columnas, agregar datos, filtrar resultados, manejar NULLs, y mucho más.
Al comprender la sintaxis y los casos de uso comunes, podrá escribir SQL más poderoso y eficiente para analizar sus datos en Redshift.
DataSunrise ofrece herramientas fáciles de usar y flexibles para la seguridad de bases de datos, la auditoría y el cumplimiento que se integran sin problemas con Amazon Redshift. Visite el sitio web de DataSunrise para solicitar una demostración en línea de nuestro equipo de expertos.
Visite el sitio web de DataSunrise para solicitar una demostración en línea de nuestro equipo de expertos.