DataSunrise está patrocinando AWS re:Invent 2024 en Las Vegas, por favor visítenos en el stand #2158 de DataSunrise

Redshift CASE WHEN: Condicionales SQL

Redshift CASE WHEN: Condicionales SQL

Redshift Case When

Introducción

Al usar el almacén de datos Redshift de Amazon, es posible que necesite utilizar lógica condicional para consultar y transformar sus datos. La expresión ‘CASE WHEN’ ayuda a evaluar condiciones y devolver diferentes resultados según si las condiciones son verdaderas o falsas.

En este artículo, profundizaremos en los fundamentos del uso de las expresiones ‘CASE WHEN’ en Redshift SQL. También cubriremos la declaración ELSE durante la discusión. Aprenderá la sintaxis, verá ejemplos y comprenderá casos de uso comunes. Al final, estará equipado para aprovechar esta esencial lógica condicional SQL en sus propias consultas 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, cada una contiene una condición a evaluar
  • Para la primera condición que se evalúe como verdadera, se devolverá el resultado correspondiente con THEN
  • Si ninguna de las condiciones es verdadera, se devolverá ELSE default_result
  • La palabra clave END señala el fin de la expresión CASE

Veamos un ejemplo simple para ilustrar. Imagine una tabla “usuarios” con columnas para id, nombre y edad. Para categorizar a los usuarios como ‘niño’, ‘adulto’ o ‘anciano’ en función de la edad, podría utilizar:

SELECT id, name,
CASE
WHEN age < 18 THEN 'niño'
WHEN age < 65 THEN 'adulto'
ELSE 'anciano'
END AS categoría_edad
FROM usuarios;

Esto evaluaría cada fila, comprobaría la edad del usuario y devolvería la categoría_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 “órdenes”:

CREATE TABLE órdenes (
order_id INT,
customer_id INT,
order_date DATE,
total DECIMAL(10,2),
status VARCHAR(20)
);
INSERT INTO órdenes
VALUES
(1, 101, '2023-01-15', 150.00, 'completado'),
(2, 102, '2023-02-10', 75.50, 'pendiente'),
(3, 101, '2023-03-01', 200.00, 'completado'),
(4, 103, '2023-03-05', 120.00, 'cancelado'),
(5, 102, '2023-04-12', 300.00, 'completado');

Esta simple expresión de caso crea una tabla de órdenes con algunos registros de muestra que ahora podemos usar para ejecutar expresiones CASE.

Usar CASE para Derivar Nuevas Columnas

Las declaraciones CASE se pueden usar para crear nuevas columnas en un conjunto de datos categorizando datos existentes. Cuando se organizan órdenes por monto total, una sentencia CASE puede establecer las reglas para cada grupo.

Órdenes menores de $100 son “Bajo Valor”. Rango de Órdenes entre $100 y $500 son “Valor Medio”. Órdenes mayores de $500 son “Alto Valor”. Puede categorizar fácilmente datos en un conjunto de datos utilizando una sentencia CASE, lo que ayuda con el análisis y la comprensión.

SELECT order_id, customer_id, total,
CASE
WHEN total < 100 THEN 'pequeño'
WHEN total < 250 THEN 'mediano'
ELSE 'grande'
END AS tamaño_orden
FROM órdenes;

Esto devolvería:

order_id | customer_id | total  | tamaño_orden
----------------------------------------------
1        | 101         | 150.00 | mediano
2        | 102         | 75.50  | pequeño
3        | 101         | 200.00 | mediano
4        | 103         | 120.00 | mediano
5        | 102         | 300.00 | grande

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 órdenes pequeñas, medianas y grandes:

SELECT
COUNT(CASE WHEN total < 100 THEN 1 END) AS órdenes_pequeñas,
COUNT(CASE WHEN total >= 100 AND total < 250 THEN 1 END) AS órdenes_medianas,
COUNT(CASE WHEN total >= 250 THEN 1 END) AS órdenes_grandes
FROM órdenes;

Esto devolvería:

órdenes_pequeñas | órdenes_medianas | órdenes_grandes
--------------------------------------------
1                | 3                 | 1

Dentro de cada COUNT(), el CASE devuelve 1 cuando se cumple la condición, que el COUNT() luego suma.

CASE en Cláusulas WHERE y HAVING

También puede utilizar expresiones CASE en cláusulas WHERE y HAVING para filtrar resultados basados en lógica condicional. Por ejemplo, para encontrar a todos los clientes que han realizado una ‘gran’ orden:

SELECT DISTINCT customer_id
FROM órdenes
WHERE
CASE
WHEN total >= 250 THEN 'grande'
ELSE 'no grande'
END = 'grande';

Esto devolvería el cliente 102, ya que son los únicos con una orden ‘grande’ superior a $250.

Manejo de Valores NULL

Las expresiones CASE también son útiles para manejar valores NULL. Puede utilizar CASE para reemplazar NULLs con un valor por defecto, o para aplicar diferente lógica cuando un valor es NULL.

Por ejemplo, suponga que nuestra tabla “órdenes” tiene una columna “fecha_envío” que podría ser NULL si la orden aún no ha sido enviada. Para devolver ‘No Enviado’ para estas órdenes:

SELECT order_id, status,
CASE
WHEN fecha_envío IS NULL THEN 'No Enviado'
ELSE CAST(fecha_envío AS VARCHAR(10))
END AS enviado
FROM órdenes;

Esto verifica si fecha_envío ES NULL, y si es así, devuelve ‘No Enviado’. De lo contrario, convierte la fecha_envío a una cadena para devolverla. Aquí deberíamos notar que usar NVL o COALESCE podría 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 se pueden anidar unas dentro de otras para lógica más compleja
  • La cláusula ELSE es opcional y, si se omite, se devolverá NULL si no coincide ninguna condición
  • Las expresiones CASE se pueden usar casi en cualquier lugar en una sentencia SQL, incluidas cláusulas SELECT, WHERE, HAVING, GROUP BY, y ORDER BY
  • Tenga cuidado con los tipos de datos: los resultados de una expresión CASE deben ser todos convertibles a un tipo de datos 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.

Comprendiendo la sintaxis y los casos de uso comunes, podrá escribir SQL más poderosos y eficientes para analizar sus datos en Redshift.

DataSunrise ofrece herramientas amigables y flexibles para seguridad de bases de datos, auditoría y cumplimiento que se integran perfectamente 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.

Siguiente

Cláusula LIMIT de Snowflake

Cláusula LIMIT de Snowflake

Más información

¿Necesita la ayuda de nuestro equipo de soporte?

Nuestros expertos estarán encantados de responder a sus preguntas.

Información general:
[email protected]
Servicio al Cliente y Soporte Técnico:
support.datasunrise.com
Consultas sobre Asociaciones y Alianzas:
[email protected]