Volver a la lista de artículos Artículos
Lectura de 8 minutos

¿Qué es GROUP BY en SQL?

GROUP BY es una gran característica de SQL que permite realizar potentes cálculos sobre datos agrupados. ¿Desea aprender a obtener poderosos conocimientos de sus datos? ¿Le gustaría saber qué hace GROUP BY y cuándo debe utilizarlo? Si su respuesta es afirmativa, siga leyendo. En este artículo, aprenderá exactamente eso.

Por qué necesita GROUP BY

En el mundo digitalizado de hoy - no importa en qué negocio se encuentre - las tablas de las bases de datos suelen ser enormes, con millones de registros. Para familiarizarse con esos datos, no basta con saber utilizar las sentencias SELECT. Una de las primeras cosas que debes aprender al tratar con cantidades masivas de datos es cómo utilizar la construcción SQL GROUP BY. Esta potente función le permite agrupar sus datos por algún atributo común, tras lo cual puede realizar cálculos en cada uno de estos grupos por separado.

Cuando se necesita GROUP BY

Por lo tanto, puedes utilizar GROUP BY cuando quieras agrupar registros y luego ejecutar algunos cálculos en cada grupo y mostrar los resultados. La siguiente pregunta es ¿cuándo - en qué situaciones o escenarios de negocio - tiene sentido utilizar la cláusula GROUP BY?

Bueno, SQL GROUP BY es ampliamente utilizado en diferentes industrias y áreas de negocio. Por ejemplo:

  • En ventas, puedes usar GROUP BY para calcular el número total de productos vendidos a nivel de producto o categoría.
  • Recursos Humanos puede pedirle que calcule el salario medio de cada departamento de la empresa utilizando una tabla que contenga información sobre los empleados, sus salarios y sus departamentos.
  • En el sector bancario, se puede calcular el número total de clientes activos frente a los no activos utilizando la construcción GROUP BY.
  • En el ámbito de la salud pública o la medicina, se puede calcular el número total de casos de COVID confirmados para cada país y provincia con GROUP BY.

Una cosa es segura: hay muchos escenarios empresariales diferentes en los que GROUP BY es útil. No importa dónde trabaje como analista de SQL, seguramente se encontrará utilizando GROUP BY todos los días.

Ahora es el momento de aprender a utilizar la cláusula GROUP BY. Comencemos con su sintaxis.

Sintaxis de GROUP BY

La sintaxis de GROUP BY es más fácil de explicar con un ejemplo, así que empecemos por echar un vistazo a la movies tabla que se muestra a continuación:

idtitledirectorproduction_year
1PsychoAlfred Hitchcock1960
3Sweet and LowdownWoody Allen1993
4Talk to HerPedro Almodovar2002
2Midnight in ParisWoody Allen2011
8The Skin I Live InPedro Almodovar2011

Como puedes ver, cada película está representada por un registro en la tabla. Para cada película, la tabla contiene información sobre su director y el año de producción.

Algunas películas son realizadas por el mismo director. Si quieres mostrar el número de películas realizadas por cada director, puedes utilizar GROUP BY de esta manera:

SELECT director,
      count(*) AS number_of_movies
FROM movies
GROUP BY director;

A continuación se explica brevemente lo que ocurre en esta consulta:

  • Esta sentencia SQL agrupa los registros por la columna director. Se indica con la palabra clave GROUP BY seguida del nombre de la columna por la que se agrupan los registros (en nuestro caso, la columna es director).
  • La columna de agrupación también debe aparecer después de la palabra clave SELECT (es decir, dentro de SELECT). Esto significa que los directores se mostrarán en la pantalla de salida y se realizarán cálculos específicos para cada grupo (para cada director) por separado.
  • Hay tres grupos de registros porque tenemos tres directores diferentes en nuestra tabla de películas (Alfred Hitchcock, Woody Allen y Pedro Almodóvar).
  • La función COUNT(*) se ejecuta en cada grupo. Contará todas las filas dentro de cada grupo.

La tabla resultante nos muestra el número total de películas de cada director:

directornumber_of_movies
Alfred Hitchcock1
Woody Allen2
Pedro Almodovar2

Fíjate en que las filas del resultado están colapsadas... cada grupo se muestra en una sola fila. Por eso la tabla resultante contiene tres filas en lugar de cinco (el número de filas de la tabla); hay tres grupos.

Cómo funciona GROUP BY

Ahora ya sabes lo que el motor SQL mostrará como resultado de nuestro GROUP BY. Pero, ¿cómo funciona realmente GROUP BY? Mira la animación de abajo:

GRUPO POR

Como puede ver en esta animación, el motor SQL primero agrupa las filas por una clave definida - en nuestro caso, la columna director. Las películas de Alfred Hitchcock están en un grupo, las de Woody Allen en otro y las de Pedro Almodóvar en un tercero. Tras la agrupación, se realiza un recuento de cada grupo por separado y se muestra el resultado. En este caso, la función COUNT() cuenta el número total de películas de cada director.

Quizá te hayas topado con la cláusula SQL ORDER BY y no estés seguro de la diferencia entre ordenar y agrupar filas. Si es así, te sugiero que eches un vistazo a la Diferencia entre GROUP BY y ORDER BY en palabras sencillas.

Cálculos múltiples en un GROUP BY

En nuestro ejemplo anterior, hemos contado los registros (películas) de cada director por separado. Hay muchas otras estadísticas que puede utilizar en una cláusula GROUP BY. Por ejemplo, en lugar de contar filas individuales, puede calcular el valor medio de cada grupo utilizando la función AVG() o puede calcular los totales utilizando SUM(). También puede utilizar las funciones MIN() o MAX() para recuperar los valores más pequeños (min) o más grandes (max) de cada grupo. Llamamos a estas funciones funciones agregadas porque realizan cálculos sobre grupos de valores y devuelven un único valor como resultado.

Veamos un ejemplo rápido de utilización de GROUP BY con funciones de agregación. En esta consulta, se puede mostrar la primera y última película realizada por cada director:

SELECT director,
      min(production_year) AS the_earliest_film_made,
      max(production_year) AS the_latest_film_made
FROM movies 
GROUP BY director;

Aquí estamos utilizando las funciones MIN() y MAX() para recuperar la información deseada. Utilizamos dos funciones... porque estamos recuperando dos estadísticas diferentes para cada grupo de registros. Esta es otra de las cosas buenas que hay que saber sobre GROUP BY: puedes hacer diferentes cálculos en una sola sentencia SQL.

Este es el resultado:

directorthe_earliest_film_madethe_latest_film_made
Alfred Hitchcock19601960
Woody Allen19932011
Pedro Almodovar20022011

Observe que los valores mínimo y máximo de Alfred Hitchcock son iguales. Esto se debe a que sólo hay una de sus películas en nuestra tabla; por lo tanto, MIN() y MAX() devuelven el mismo valor. Otros directores de la tabla movies tabla tienen más películas en su cartera, por lo que tienen valores diferentes.

No tenemos espacio para profundizar en las funciones de agregación aquí; puedes encontrar una explicación detallada sobre las funciones de agregación y su uso con GROUP BY en nuestro artículo A Beginner's Guide to SQL Aggregate Functions.

Agrupar por con múltiples columnas

En el ejemplo anterior, vimos que es posible hacer más de un cálculo en una sentencia GROUP BY. De manera similar, también es posible agrupar filas basadas en más de una columna. En realidad, esto significa que cada grupo específico en la salida está definido por más de un valor de columna.

Supongamos que nuestra movies tabla también tiene un atributo de género para cada una de las películas:

idtitledirectorproduction_yeargenre
1PsychoAlfred Hitchcock1960thriller
3Sweet and LowdownWoody Allen1993comedy/drama
4Talk to HerPedro Almodovar2002romance/drama
2Midnight in ParisWoody Allen2011comedy/drama
8The Skin I Live InPedro Almodovar2011thriller/drama

En lugar de agrupar las filas por director, podríamos agruparlas por director y género para calcular el número de películas de cada director en cada género:

SELECT director,
      genre,
      count(*) as number_of_movies 
FROM movies
GROUP BY director, genre;

He aquí una breve explicación de la consulta anterior:

  • Dentro del GROUP BY, tenemos dos columnas: director y género. Esas dos columnas también se definen después del SELECT Recuerda que debes listar todas las columnas del GROUP BY dentro del SELECT.
  • En este ejemplo, cada grupo está definido por un director y un género. Esto significa que distinguiremos las películas de suspense/drama de Pedro Almodóvar como un grupo y sus películas de romance/drama como otro grupo. Así, tendremos cuatro filas (no tres) en la salida:
directorgenrenumber_of_movies
Alfred Hitchcockthriller1
Woody Allencomedy/drama2
Pedro Almodovarromance/drama1
Pedro Almodovarthriller/drama1

th style="background-color:#37c591"

Genial, ¿verdad? A estas alturas, probablemente entiendas que GROUP BY es una función de SQL muy potente y eficaz. Si quieres ver más ejemplos de GROUP BY, te sugiero el artículo Ejemplos de SQL GROUP BY. Allí encontrarás 5 ejemplos adicionales que te ayudarán a dominar GROUP BY.

Profundice su conocimiento de SQL GROUP BY

Esperamos que estos ejemplos te hayan mostrado lo fácil que es escribir una cláusula SQL GROUP BY. Es realmente útil en el día a día de los negocios, ya que te ayuda a obtener una poderosa visión de los datos en sólo unas pocas líneas de código.

Ahora es el momento de practicar. Te sugiero que empieces con el curso de SQL para principiantes en LearnSQL.es. Si ya has pasado por los fundamentos y quieres perfeccionar tus habilidades, prueba nuestro curso Ejercicios prácticos de SQL. Recuerda que sólo practicando podrás mejorar tus conocimientos y avanzar hacia el título de experto en SQL.