Saltar al contenido principal
InicioTutorialesSQL

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 leer

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

Certificación disponible

Course

Introducción a SQL

2 hr
792.6K
Aprende a crear y consultar bases de datos relacionales utilizando SQL en sólo dos horas.
See DetailsRight Arrow
Start Course
Certificación disponible

Course

SQL intermedio

4 hr
248.9K
Acompañado en cada paso con consultas prácticas, este curso te enseña todo lo que necesitas saber para analizar datos utilizando tu propio código SQL ¡hoy mismo!
Ver másRight Arrow