DevPath · Aprende a programar ESPTEN

Agregaciones: GROUP BY y HAVING

Agrupar con GROUP BY

Un agregado por grupo

Casi nunca queremos un solo número para toda la tabla, sino uno por categoría, por cliente, por mes.... Para eso está GROUP BY: divide las filas en grupos según los valores de una columna y aplica la función agregada a cada grupo por separado.

SELECT categoria, AVG(precio) AS precio_medio
FROM productos
GROUP BY categoria;

Esto devuelve una fila por cada categoría distinta, con el precio medio de los productos de esa categoría.

Qué puede ir en el SELECT

Esta es la regla de oro: cuando hay GROUP BY, en el SELECT solo pueden aparecer:

  1. Las columnas por las que agrupas (las que están en el GROUP BY).
  2. Funciones agregadas (COUNT, SUM, AVG...).

Poner una columna "normal" que no esté en el GROUP BY no tiene sentido: el grupo tiene muchas filas y ese campo puede valer cosas distintas en cada una.

-- Productos y stock total por categoria, de mayor a menor stock
SELECT categoria, SUM(stock) AS stock_total
FROM productos
GROUP BY categoria
ORDER BY stock_total DESC;

ORDER BY se aplica después de agrupar, así que puedes ordenar por el propio agregado (por su alias o repitiendo la función).

Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Funciones agregadasFiltrar grupos con HAVING →