Saltar al contenido principal

Sentencias CASE en PostgreSQL

En este tutorial aprenderás a escribir consultas condicionales en PostgreSQL utilizando la expresión condicional CASE de PostgreSQL.
Actualizado 11 sept 2024  · 7 min de lectura

Las expresiones condicionales son uno de los elementos fundamentales de cualquier paradigma de programación. Las expresiones condicionales habituales incluyen los bloques if-else y los casos switch. Puedes formular expresiones condicionales en PostgreSQL utilizando WHEN-THEN case, que es muy similar a los bloques de if-else. En este tutorial aprenderás cómo hacerlo.

Antes de empezar a escribir consultas de condiciones, es importante que configures una base de datos PostgreSQL local. Lo harás en la primera sección de este tutorial.

Nota: Para poder seguir este tutorial necesitas conocer los conceptos básicos de SQL y PostgreSQL. No dudes en refrescar los conceptos básicos con los siguientes recursos:

Configurar una base de datos PostgreSQL localmente

Puedes utilizar este archivo de copia de seguridad y restaurarlo en tu servidor PostgreSQL. Si quieres saber cómo hacerlo, puedes seguir este artículo. Después de restaurar correctamente la copia de seguridad, deberías poder ver estas tablas en la base de datos -

  • países
  • route_table
  • station_table
  • train_table

Este tutorial, sin embargo, sólo utiliza la tabla countries. Explora libremente las tablas proporcionadas en la copia de seguridad de la base de datos. Además, puedes crear tus propias bases de datos y tablas. Si has restaurado la copia de seguridad de la base de datos, ya deberías tener una tabla (con los datos de los distintos países del mundo). Exploremos ahora muy brevemente la tabla countries.

Explorar la countries tabla muy brevemente

Tras restaurar la base de datos, puedes ver la tabla en la interfaz pgAdmin que viene con la instalación por defecto de PostgreSQL. Al ejecutar una simple sentencia SELECT, conocerás las columnas, sus tipos de datos y también las filas que contiene la tabla -

database

La tabla contiene datos sobre un total de 206 países diferentes de varias regiones del mundo. ¿Cuántas regiones exactamente? La consulta siguiente debería darte la respuesta a la pregunta.

SELECT COUNT(DISTINCT(region)) from countries;

Resulta que en esta tabla hay 23 regiones diferentes, como Europa Occidental, Polinesia, Oriente Medio, etc. Puedes explorar la tabla con tus propias preguntas rápidas y, por el camino, puede que descubras datos interesantes. Veamos ahora la anatomía de un PostgreSQL básico CASE.

Conviértete en Ingeniero de Datos

Conviértete en un ingeniero de datos mediante el aprendizaje avanzado de Python
Empieza a Aprender Gratis

Introducción a PostgreSQL CASE

A continuación se describe la forma general de un caso PostgreSQL con la construcción WHEN-THEN -

CASE
     WHEN condition_1  THEN result_1
     WHEN condition_2  THEN result_2
     ...
     ELSE  result_n
END

He aquí algunos puntos críticos que debes tener en cuenta al construir CASEs en PostgreSQL:

  • Cada condición es una expresión booleana y en función de su salida se elige el resultado. Si todas las expresiones correspondientes a WHEN se evalúan como False, entonces se muestra el resultado correspondiente a la parte ELSE. En caso de que no especifiques la parte ELSE; la consulta devolverá null.

  • Una condición se aplica generalmente sobre una columna presente en la tabla sobre la que operas. Las construcciones de consulta condicional como las anteriores se suelen hacer con sentencias SELECT. Ten en cuenta que, la columna debe estar presente en la sentencia SELECT de tu consulta, sobre la que estás especificando las expresiones booleanas (en CASE). Pero cuando utilices CASE junto con una cláusula where, no es necesario que sigas este procedimiento (más adelante hablaremos de ello).

  • El tipo de datos de los resultados tiene que ser uniforme. No puedes devolver un string en result_1 y un integer en result_2 y así sucesivamente.

Veamos ahora algunos ejemplos.

Escribir PostgreSQL CASEs

Empecemos por lo sencillo. Ahora escribirás un CASE para agrupar los países con respecto al año de independencia. Los años de independencia se registran en la columna indep_year. Supongamos que tienes tres grupos de años de independencia de los países que debes seguir. Para ello crearás tres grupos de años de independencia -

  • Antes de 1900 (indep_year < 1900)
  • Entre 1900 y 1930 (indep_year <= 1930)
  • Después de 1930 (indep_year > 1930)

El resultado final de la consulta debe contener las siguientes columnas -

  • nombre (del país)
  • continente (al que pertenece el país)
  • indep_year
  • Y el grupo de años de independencia que crearás. Llamémoslo indep_year_group.

Escribamos ahora la consulta -

SELECT name, continent, indep_year,
    CASE WHEN indep_year < 1900 THEN 'before 1900'
         WHEN indep_year <= 1930 THEN 'between 1900 and 1930'
         ELSE 'after 1930' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

(La consulta está inspirada en el curso "Unir datos en SQL " de DataCamp).

Al ejecutar la consulta, verás muchos países como Palestina, Puerto Rico, etc. para los que no se proporciona ningún año de independencia en la tabla. De ahí que hayan conseguido el grupo between 1900 and 1930.

PostgreSQL CASEs puede tener varias condiciones. Hay un puñado de entradas en la tabla en las que el nombre del país y la capital coinciden. Puedes añadirlo a tu CASE previamente construido -

SELECT name, continent, indep_year,
    CASE WHEN (indep_year < 1900) AND (countries.name = countries.capital) THEN 'before 1900 and capital same'
         WHEN indep_year <= 1930 AND (countries.name = countries.capital) THEN 'between 1900 and 1930 and capital same'
         ELSE 'after 1930_and_no_same_capital' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

Otra cosa interesante de CASEs es que puedes emparejarlas con funciones agregadas como SUM(). Para implementar una CASE con la función agregada SUM(), necesitarás una tabla diferente en la que esto pueda ser una buena idea. Vamos a crear una tabla simple llamada student_grades que tenga las siguientes columnas y tipos de datos -

  • student_name (string)
  • student_stream (string)
  • student_grade (character)

La siguiente consulta crea la tabla por ti -

CREATE TABLE student_grades
(student_name character varying,
student_stream character varying,
student_grade character);

Insertemos ahora algunos registros en la tabla. Puedes hacerlo utilizando algunas frases de INSERT. Digamos que después de las inserciones, la tabla student_grades tiene ahora los siguientes registros -

tabla

Ahora, escribirás un CASE para obtener la suma de los alumnos que pertenecen a determinados grupos de grado. Como puedes ver, según las instancias de la tabla, hay tres grados distintos: A, B y C. La consulta condicional debería devolver un resultado similar al siguiente -

tabla

La consulta para este -

SELECT
 SUM (
 CASE
 WHEN student_grade = 'A' THEN
 1
 ELSE
 0
 END
 ) AS "High Scoring",
 SUM (
 CASE
 WHEN student_grade = 'B' THEN
 1
 ELSE
 0
 END
 ) AS "Mid Scoring",
 SUM (
 CASE
 WHEN student_grade = 'C' THEN
 1
 ELSE
 0
 END
 ) AS "Low Scoring"
FROM
 student_grades;

Así es como puedes emparejar CASE con funciones agregadas para obtener datos interesantes sobre los datos.

Conclusión y lecturas complementarias

Eso es todo por este tutorial. En este tutorial, has aprendido a incorporar if-then como condicionamiento en tus consultas SQL para obtener informes interesantes. Has trabajado con varios ejemplos para reforzar esta habilidad. Si buscas ejercicios más desafiantes, deberías realizar los siguientes cursos DataCamp sobre SQL -

No dudes en hacerme llegar tus preguntas sobre este tutorial a través de la sección Comments.

Certifícate en SQL

Demuestra que tus conocimientos de SQL están preparados para el trabajo con una certificación.
Temas

Cursos de SQL

curso

Introduction to SQL

2 hr
976K
Learn how to create and query relational databases using SQL in just two hours.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Sentencias IF, ELIF y ELSE de Python

En este tutorial, aprenderás exclusivamente sobre las sentencias if else de Python.
Sejal Jaiswal's photo

Sejal Jaiswal

9 min

tutorial

Comprender la función DECODE() de SQL

Aprende a utilizar DECODE() en Oracle para la lógica condicional en la transformación de datos. Compara DECODE() con la sentencia CASE WHEN en cuanto a rendimiento y comportamiento.
Allan Ouko's photo

Allan Ouko

11 min

tutorial

Uso de PostgreSQL en Python

Descubra cómo crear, conectar y gestionar bases de datos PostgreSQL utilizando el paquete psycopg2 de Python.
Javier Canales Luna's photo

Javier Canales Luna

14 min

tutorial

Tutorial sobre cómo ejecutar consultas SQL en Python y R

Aprenda formas fáciles y eficaces de ejecutar consultas SQL en Python y R para el análisis de datos y la gestión de bases de datos.
Abid Ali Awan's photo

Abid Ali Awan

13 min

tutorial

Tutorial de comparación de patrones SQL LIKE

Utiliza LIKE para filtrar registros SQL según coincidencias de cadenas específicas. Este tutorial te enseña a utilizar comodines, NOT, LOWER, UPPER y CASE WHEN con LIKE.
Travis Tang 's photo

Travis Tang

8 min

See MoreSee More