Agrupamiento de resultados con GROUP BY en SQL

Agrupamiento de resultados con GROUP BY en SQL

En este capítulo, aprenderás a usar la cláusula GROUP BY de SQL con varios ejemplos prácticos. También te mostraré la diferencia que tiene GROUP BY y ORDER BY.


¿Qué es GROUP BY?

GROUP BY es una cláusula de SQL que se usa para agrupar registros en un conjunto de resultados en función de los valores de una o más columnas. Se utiliza a menudo con funciones de agregado (como pueden ser COUNT(), MAX(), MIN(), SUM() y AVG()).

Sintaxis

La sintaxis básica de la cláusula GROUP BY es la siguiente:

SELECT columna1, columna2, ...
FROM nombre_tabla
WHERE condición
GROUP BY columna1, columna2, ...
ORDER BY columna1, columna2, ...;

En este ejemplo, columna1 y columna2 son las columnas por las que se agrupa el conjunto de resultados. La cláusula WHERE se utiliza para filtrar las filas antes de agruparlas. La cláusula ORDER BY se usa para ordenar el conjunto de resultados final.

Diferencia entre ORDER BY y GROUP BY

Antes de empezar con GROUP BY, es conveniente que veas las diferencias que tiene con ORDER BY, ya que una de las cosas que suelen pasar al empezar a aprender este tema, es pensar que hacen lo mismo.

Principalmente, quédate con esto. ORDER BY ordena, GROUP BY agrupa.

En el siguiente ejemplo, le digo que me muestre los continentes y que me los ordene en orden ascendente (por defecto es ASC) de la tabla "Country".

SELECT Continent
FROM Country
ORDER BY Continent;
order by sql

El resultado da 239 registros. Aparecen todas las filas de países que tiene "Country". Sin embargo, si quieres que se agrupe el resultado en torno a los valores diferentes, puedes utilizar GROUP BY:


SELECT Continent
FROM Country
GROUP BY Continent;
group by vs order by

Esta vez, solo hay 7 registros (aunque América sea realmente 1 solo continente).

La función de agregado COUNT() con GROUP BY

Las funciones de agregado se usan muy a menudo con GROUP BY. Empecemos por la función COUNT().

Lo que quiero hacer en la siguiente consulta, es agrupar todos los continentes y sacar un conteo del total de países que tiene cada continente.

SELECT Continent AS Continente, COUNT(*) AS "Total países"
FROM Country
GROUP BY Continent;
group by con la función count

Con esto, hemos agrupado todos los registros de la tabla por continente con GROUP BY y con COUNT, los hemos contado.

La función de agregado SUM() con GROUP BY

Para el siguiente ejemplo, vamos a sumar toda la población agrupada en continentes.

SELECT Continent AS Continente, SUM(Population) AS "Total población"
FROM Country
GROUP BY Continent;
group by con la función sum

Esta vez, seguimos agrupando por continente, pero conseguimos con SUM(), obtener la suma de la población en cada continente.

Las funciones de agregado MIN() y MAX() en agrupaciones

En el siguiente ejemplo utilizo las funciones de agregado MIN() y MAX() junto con GROUP BY para agrupar según continentes y su población más baja o más alta en cada caso.

SELECT Continent AS Continente, MIN(Population) AS "Población mínima"
FROM Country
GROUP BY Continent;
función min

En Oceanía, antártica y África hay algún

SELECT Continent AS Continente, MAX(Population) AS "Población máxima"
FROM Country
GROUP BY Continent;
función max

Agrupar por varias columnas

Para terminar, vamos a ver un ejemplo de cómo se agruparía con más de una columna a la vez.

SELECT Continent AS "Continente", 
Region AS "Región", 
COUNT(*) AS "Total países"
FROM country
GROUP BY Continent, Region
ORDER BY Continent;

En este caso, se agrupan los continentes en varias partes, las agrupaciones de las regiones.

No te pierdas nada del curso Máster en SQL.


2 comentarios en «0»

  1. Usted tiene un gran Don para explicar. Empece este curso y no he parado de leerlo. Creo que ya he llegado hasta donde usted va. Que Dios lo bendiga. Nos da oportunidad a los que no tenemos otras opciones.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso Java Entrada anterior Crear un proyecto JavaFX
curso Java Entrada siguiente Fundamentos de JavaFX