GROUP BY en SQL
La cláusula
GROUP BY
en SQL agrupa filas que comparten el mismo valor en una o varias columnas, para poder resumirlas con funciones de agregación (
COUNT
,
SUM
,
AVG
…).
GROUP BY transforma filas individuales en resúmenes por categoría. Es el equivalente SQL de «agrupar por país y contar clientes» o «sumar ventas por mes».
Toda columna del SELECT que no esté agregada debe aparecer en el GROUP BY. Si filtras grupos, usa HAVING, no WHERE.
GROUP BY transforma filas individuales en resúmenes por categoría. Es el equivalente SQL de «agrupar por país y contar clientes» o «sumar ventas por mes».
Toda columna del SELECT que no esté agregada debe aparecer en el GROUP BY. Si filtras grupos, usa HAVING, no WHERE.
Por ejemplo, en lugar de listar cada cliente, puedes preguntar «¿cuántos clientes hay por país?». Cada país forma un grupo y
COUNT
cuenta las filas de ese grupo.
Las columnas del
SELECT
que no van dentro de una función de agregación deben aparecer en el
GROUP BY
.
Sintaxis GROUP BY
La sintaxis indica el orden de argumentos y palabras clave. Copia la plantilla y sustituye nombres de columnas o literales entre comillas simples.
Plantilla
SELECT columna_grupo, COUNT(*)
FROM nombre_tabla
WHERE condicion
GROUP BY columna_grupo
ORDER BY columna_grupo;
GROUP BY: contar clientes por país
Cuántos clientes hay en cada país:
COUNT por Pais
SELECT Pais, COUNT(ID_Cliente) AS Total_Clientes
FROM Clientes
GROUP BY Pais;
Resultado: seis filas (un país por grupo). España suele ser el que más clientes tiene en la demo.
| Pais | Total_Clientes |
|---|---|
| España | 5 |
| UK | 1 |
| Francia | 1 |
| Alemania | 1 |
| Italia | 1 |
| Suecia | 1 |
COUNT por Pais en la demo.GROUP BY con ORDER BY
Puedes ordenar por el recuento de cada grupo, de mayor a menor:
Ordenar por COUNT
SELECT Pais, COUNT(ID_Cliente) AS Total_Clientes
FROM Clientes
GROUP BY Pais
ORDER BY COUNT(ID_Cliente) DESC;
Resultado: los países ordenados de mayor a menor número de clientes (España primero en la demo).
GROUP BY con SUM en SQL
También puedes sumar una columna numérica dentro de cada grupo — aquí, ventas totales por país:
Resultado:
una fila por país con la suma de
N_Ventas
de sus clientes.
Resumen
-
GROUP BYcrea grupos de filas con el mismo valor en la columna indicada. -
Las funciones
COUNT,SUM,AVG… calculan un valor por grupo. -
Toda columna del
SELECTque no esté dentro de una función de agregación debe listarse enGROUP BY. -
Para filtrar grupos (no filas sueltas), usa
HAVING.
Cómo practicar en el editor
1. Pulsa Pruébalo tú mismo en un ejemplo.
2. Cambia un filtro, columna o literal.
3. Ejecuta y compara el resultado con la tabla de ejemplo.
Comprueba lo aprendido
Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.