Ir al contenido principal

Funciones de agregación en SQL

Aprende a usar funciones de agregación para resumir resultados y obtener insights útiles sobre datos en SQL.
Actualizado 17 sept 2026  · 9 min leer

Explorar con IA

ChatGPTClaudePerplexity

Crear informes a partir de un conjunto de datos es una habilidad esencial si trabajas con datos. Al fin y al cabo, quieres responder a preguntas clave del negocio con los datos que tienes a mano. Muchas veces, estas respuestas se presentan como gráficos, pero otras, también se necesitan informes en forma de tablas. En ambos casos, puede que necesites resumir los datos con cálculos sencillos. En SQL, puedes resumir/agrupar los datos con funciones de agregación. Con estas funciones podrás responder preguntas como:

  • ¿Cuál es el valor máximo de some_column_from_the_table? o
  • ¿Cuáles son los valores mínimos de some_column_from_the_table con respecto a another_column_from_the_table?

y muchas más.

Vamos a empezar a hacer algo de agregación de datos.

Nota: Para seguir este tutorial, necesitas saber escribir consultas básicas en PostgreSQL (que es el SGBD que vas a usar). Este tutorial puede servirte para repasar.

Configuración de la base de datos

Primero, vamos a crear una base de datos en PostgreSQL y a restaurar esta copia de seguridad, que contiene la tabla que vas a usar en este tutorial. Si quieres aprender a restaurar una copia de seguridad en PostgreSQL, puedes seguir la primera sección de este tutorial.

Si has podido restaurar la copia, deberías ver una tabla llamada international_debt en la base de datos (si no tienes una base de datos creada, tendrás que crearla primero). Echemos un vistazo rápido a las primeras filas de la tabla (una consulta select sencilla te servirá):

database

La tabla contiene información sobre las estadísticas de deuda de distintos países del mundo para el año en curso y en diferentes categorías (consulta las columnas indicator_name e indicator_code). La columna debt muestra el importe de la deuda (en USD) que tiene un país en una categoría específica. Es un conjunto de datos del ámbito de la economía y se usa a menudo para analizar la situación económica de diferentes países. Los datos proceden del Banco Mundial.

Ahora que has configurado la base de datos correctamente, vamos a ejecutar algunas consultas sencillas para conocer mejor los datos. Abre la herramienta pgAdmin y empezamos.

La información básica importa

En la figura anterior puedes ver que hay muchas entradas duplicadas para un mismo país pero en categorías distintas. Una pregunta que surge de inmediato es:

¿Qué países distintos aparecen registrados en la tabla?

Si ejecutas una consulta select con la columna country_name, no obtendrás la respuesta correcta porque el resultado contendrá duplicados. Usemos la palabra clave DISTINCT para solucionarlo.

select distinct country_name from international_debt;

Y esto debería devolver algo así:

return

Ahora ya tienes una buena respuesta a la pregunta anterior. Una última antes de pasar a las funciones de agregación:

¿Cuántos tipos distintos de indicadores de deuda hay en la tabla?

La consulta para responderla debería ser similar a la anterior. Solo cambia el nombre de la columna. ¿Lo dejamos como ejercicio? El resultado será parecido al siguiente:

return

Funciones de agregación

Empecemos ejecutando una consulta con una función de agregación y sigamos a partir de ahí. Por el camino, verás la sintaxis y los constructos que necesitas cuando apliques funciones de agregación en SQL.

select sum(debt) from international_debt;

Y el resultado:

result

Con la función de agregación SUM() puedes calcular la suma aritmética de una columna (que contenga valores numéricos). Con la consulta anterior, obtienes el total de deuda pendiente de los países que aparecen en la tabla.

Ten en cuenta que SUM() no tiene en cuenta los valores NULL al calcular la suma. Ahora, vamos a responder a la pregunta:

¿Cuál es el importe máximo de deuda?

Aquí entra en juego la función de agregación MAX():

select max(debt) from international_debt;

Y la respuesta es:

answer

Al igual que SUM(), MAX() tampoco considera las entradas NULL en sus cálculos. Existe una función similar, MIN(). ¿Me cuentas el valor mínimo de la columna debt en la sección de Comentarios? Ahora es buen momento para comprobar si hay alguna entrada no válida en la columna debt y asegurarnos de que los resultados son correctos hasta ahora.

Fíjate en que aquí usamos estas funciones en minúsculas, como se muestra arriba.

Cuando ejecutes esta consulta: select * from international_debt where debt is null;, deberías obtener un resultado vacío. Ahora vamos a averiguar el número total de países distintos presentes en la tabla.

select count(distinct(country_name)) from international_debt;

Verás que hay un total de 124 países distintos en la tabla. Fíjate bien en la sucesión de funciones que aplicaste en la consulta anterior. Sí, aquí se permite encadenar más de una función de agregación de forma lógica.

Ahora, supongamos que quieres ver el valor medio de la columna debt. La función es AVG():

select avg(debt) from international_debt;

Verás que el valor es 1306633214.966397971 (USD). Es buena idea presentar estos resultados con nombres de columna adecuados. Como ves arriba, PostgreSQL cambia el nombre de la columna por el de la función de agregación cuando devuelve el resultado. Así que conviene asignar un alias claro a estas columnas. Puedes hacerlo así:

select avg(debt) as Average_Debt_By_A_Country from international_debt;

El resultado es mucho más fácil de interpretar:

result

Ahora vamos a subir un poco la complejidad. Para poder responder a preguntas como ¿Cuáles son los valores mínimos de some_column_from_the_table con respecto a another_column_from_the_table?, necesitas combinar una función de agregación con la cláusula GROUP BY. Veamos cómo.

Funciones de agregación + GROUP BY + más

Imagina que quieres generar un informe donde se muestre el country_name y la suma de sus deudas. Por ejemplo:

report

Informes como este se usan muy a menudo en el mundo real. ¿Qué consulta necesitas para obtenerlo? Tendrás que usar la función SUM() sobre debt. Y también tendrás que mostrar el country_name junto con la suma de deudas. Ejecuta esta consulta:

select country_name, sum(debt) from international_debt;

¿No te devuelve el siguiente error?

ERROR: column "international_debt.country_name" must appear in the GROUP BY clause or be used in an aggregate function

Vamos a entender qué significa. Cuando usas una función de agregación (como SUM()) junto a una columna no agregada como country_name, debes pasar esa columna no agregada a una cláusula GROUP BY. Así que la consulta correcta será:

select country_name, sum(debt) as total_debt from international_debt group by country_name;

Y el resultado es el esperado:

result

Nota el uso de alias en la consulta.

Ahora, supón que necesitas ordenar este informe por total_debt de mayor a menor. ¿Recuerdas la cláusula ORDER BY? Sí, también puedes combinar funciones de agregación con ORDER BY:

select country_name, sum(debt) as total_debt from international_debt
group by country_name order by total_debt desc;

El resultado ahora debería estar ordenado de forma descendente:

result

Nota la columna que usaste en la cláusula ORDER BY.

Otra pregunta importante:

¿Cuál es el importe de deuda más alto por categorías (ordenado de mayor a menor)?

Aquí tendrás que usar la función MAX(). A estas alturas, escribir la consulta no debería costarte:

select indicator_code, max(debt) as maximum_debt from international_debt
group by indicator_code order by maximum_debt desc;

Y obtienes un informe limpio:

report

También puedes limitar el número de filas en informes como este. Por ejemplo, si solo quieres incluir las cinco primeras entradas, usa la cláusula LIMIT.

select indicator_code, max(debt) as maximum_debt from international_debt
group by indicator_code order by maximum_debt desc
limit 5;

Hora del informe final de este tutorial. Necesitas incluir los nombres de los países en el informe anterior. ¿Cómo lo harías? Con la siguiente consulta:

select country_name, indicator_code, max(debt) as maximum_debt from international_debt
group by country_name, indicator_code order by maximum_debt desc;

Otro buen informe:

report

En la consulta anterior, añadiste la columna country_name tras la cláusula SELECT y también la incluiste en GROUP BY. Puedes extender este formato con tantas columnas como necesites.

El orden de GROUP BY, ORDER BY y LIMIT es muy importante al generar informes como este. Si cambias el orden por error, te encontrarás con errores. Compruébalo:

select country_name, sum(debt) as total_debt from international_debt
order by total_debt desc group by country_name;

Y obtienes:

ERROR:  syntax error at or near "group"
LINE 1: ... from international_debt order by total_debt desc group by c...

En la consulta anterior, colocaste la cláusula ORDER BY antes de GROUP BY, lo cual no está permitido. De hecho, tampoco aplica cuando no usas funciones de agregación. El orden correcto es: GROUP BY -> ORDER BY -> LIMIT. No lo olvides.

Próximos pasos

¡Enhorabuena! Has llegado al final del tutorial. Aquí has visto las distintas funciones de agregación en PostgreSQL y cómo usarlas para generar informes útiles. Son habilidades clave para cualquier científico de datos. Para llevar tus habilidades en SQL al siguiente nivel de forma sistemática, puedes hacer estos cursos de DataCamp:

Temas
SQL

Cursos de SQL

Curso

Manipulación de datos en SQL

4 h
335K
Domina las consultas SQL para responder a preguntas de ciencia de datos y prepara conjuntos de datos para analizarlos en PostgreSQL.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado

Tutorial

FUNCIÓN SQL COUNT()

COUNT() te permite contar el número de filas que cumplen determinadas condiciones. Aprende a utilizarlo en este tutorial.
Travis Tang 's photo

Travis Tang

3 min

Tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

6 min

Tutorial

Cómo utilizar la función COALESCE() en SQL (con ejemplos)

Aprende a utilizar la función COALESCE() de SQL para tratar valores nulos, combinar columnas y limpiar tus datos con ejemplos y consejos reales.
Travis Tang 's photo

Travis Tang

5 min

Tutorial

FUNCIÓN SQL FORMAT()

FORMAT() es una de las funciones más utilizadas en SQL. Conozca sus principales aplicaciones en este tutorial.
Travis Tang 's photo

Travis Tang

3 min

Tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

9 min

Tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

3 min

Ver MásVer Más