← Lumbre

SQL y Consultas de Datos · 3.º Agregación y GROUP BY

← Volver a todos los contenidos
Portada de Agregación y GROUP BY

Agregación y GROUP BY

✦ Una vez que sabes traer filas, el salto analítico es condensarlas: contar, sumar, promediar por categorías · SQL y Consultas de Datos · Bases de Datos · en menos de 5 minutos

Roadwise Consulting

Firmado y verificado · Fernando Castro

Objetivo: Resumir conjuntos de filas con funciones de agregación y particionar el cálculo con GROUP BY, filtrando grupos con HAVING y distinguiendo esto del WHERE.

5 min 18–30 años
Autoevaluación
Más
Agregación y GROUP BY

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Objetos Cursos Explorar Mi cuenta Salir del modo estudio

Agregación y GROUP BY

Diagrama de SQL: tablas unidas con JOIN, filtrado SELECT y agregacion GROUP BY.
SQL: consultas, joins, agregacion y optimizacion de consultas.

Mapa conceptual

  • SQL
    • Básico
      • SELECT
      • WHERE
      • ORDER BY
    • JOINs
      • INNER
      • LEFT
      • FULL
    • Agregación
      • GROUP BY
      • HAVING
    • Avanzado
      • Subconsultas
      • CTEs
      • Ventana
    • Rendimiento
      • EXPLAIN
      • Índices

Funciones de agregación

COUNT, SUM, AVG, MIN y MAX reducen un conjunto de filas a un valor. COUNT cuenta filas (o valores no nulos si se le da una columna), SUM acumula, AVG promedia ignorando nulos, y MIN y MAX devuelven extremos. Opera cada una sobre la columna indicada del grupo.

El concepto de grupo

Sin GROUP BY, una agregación trata toda la tabla como un único grupo y devuelve una fila. Con GROUP BY partes las filas en grupos según los valores de las columnas listadas, y calculas una agregación por grupo. El resultado tiene una fila por combinación distinta de esos valores.

La regla de oro de SELECT

Toda columna que aparezca en SELECT sin estar dentro de una agregación debe figurar también en GROUP BY. Si no, no está definida: el motor no sabe de qué fila del grupo tomar ese valor. Es el error clásico del que empieza y una garantía de que la consulta tiene sentido.

WHERE antes, HAVING después

WHERE filtra filas individuales antes de agrupar; HAVING filtra grupos ya agregados. No puedes poner una agregación en WHERE porque las filas aún no se han condensado. La pregunta que decide: ¿filto filas (WHERE) o filtro resúmenes (HAVING)?

Un ejemplo mental

Para «ventas totales por región que superen 10.000»: agrupas por región, sumas ventas y con HAVING conservas los grupos cuyo total pasa de 10.000. Si quisieras ignorar ventas nulas o de un producto concreto antes de sumar, eso iría en WHERE.

COUNT de asterisco frente a columna

COUNT con asterisco cuenta filas, incluidas las que tienen NULL en cualquier columna. COUNT de una columna cuenta solo los valores no nulos de esa columna. La diferencia importa cuando hay huecos: con asterisco obtienes el tamaño del grupo; con columna, cuántos respondieron.

COUNT DISTINCT

Para contar valores únicos en lugar de ocurrencias se usa COUNT con DISTINCT: usuarios distintos que compraron, no número de compras. Es la métrica estrella cuando interesa la cobertura y no el volumen.

  1. WHERE descarta filas no deseadas.
  2. GROUP BY reparte las supervivientes en grupos.
  3. Las agregaciones resumen cada grupo.
  4. HAVING elimina grupos que no interesan.
  5. SELECT proyecta grupo y resumen, ORDER BY ordena.

Agrupar por varias columnas

GROUP BY acepta varias columnas: el grupo queda definido por la combinación de todas ellas. Añadir una dimensión parte los grupos en más y más pequeños. Conviene pensar el GROUP BY como las etiquetas de fila de una tabla dinámica.

Agregaciones dentro de expresiones

Puedes combinar agregaciones con aritmética: ratio entre un SUM y un COUNT, o media de una resta. Lo que no puedes es mezclar una columna no agrupada con una agregada en la misma expresión, por la misma razón que antes.

Nulos en las agregaciones

Casi todas las agregaciones ignoran los NULL: AVG promedia solo los valores presentes, SUM los omite. Esto es a la vez útil y peligroso: una media calculada sobre dos de diez valores no es comparable con una llena. Vigila cuántos no nulos hay detrás de cada resumen.

Cada necesidad de condensación tiene su cláusula exacta.
QuieresHerramientaCuidado
una fila por categoríaGROUP BYtoda columna no agregada debe estar en el GROUP
filtrar filas antes de resumirWHEREno admite agregaciones
filtrar resúmenesHAVINGse evalúa tras agrupar
valores únicos, no repeticionesCOUNT DISTINCTmás costoso que un COUNT normal

Necesitas las regiones cuyo número de pedidos supere 50. ¿Dónde va esa condición?

Ordenar por una agregación

Es habitual querer el top: ordenar por la columna agregada de forma descendente y limitar. El orden lógico lo permite porque ORDER BY se evalúa tras SELECT, cuando la agregación ya existe con su alias.

Rendimiento de la agregación

Agrupar grandes volúmenes exige ordenar o hashear claves de grupo; sin índice en las columnas de GROUP BY puede ser caro. Filtrar pronto con WHERE reduce filas antes de agrupar y suele ser la optimización más barata de todas.

Errores frecuentes

  • Olvidar incluir en GROUP BY una columna del SELECT que no está agregada.
  • Poner una condición con COUNT o SUM dentro de WHERE.
  • Contar con asterisco creyendo que cuentas valores no nulos.

HAVING puede contener funciones de agregación, mientras que WHERE no.

Del conteo a la proporción

Muchos indicadores son cocientes de agregaciones: tasa, media ponderada, participación. Dominar GROUP BY y sus agregaciones deja construir casi cualquier métrica de negocio a partir de filas de detalle.

Vocabulario de agregación

Colapsa filas en un valor
Función de agregación
Una fila por categoría
GROUP BY
Filtra grupos ya hechos
HAVING
Cuenta valores únicos
COUNT DISTINCT
Ignora los huecos al promediar
AVG

Toca una tarjeta para ver la respuesta.

Ordena las fases de una consulta agregada:

Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.

Video complementario
Recurso audiovisual para reforzar los conceptos.

Escribe una consulta que dé, por producto, el número de pedidos y la venta media, mostrando solo productos con más de 100 pedidos. ¿Qué va en WHERE, qué en GROUP BY y qué en HAVING?

Tu texto se guarda sólo en este dispositivo.

Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.

Autoevaluación

Comprueba lo que aprendiste

2 preguntas · ves cada respuesta al momento · el resultado queda guardado en tu historial

Iniciar autoevaluación
Más sobre esta lección

Rutas vivas

¿Y ahora qué? Elige el camino por lo que necesitas

No es un listado al azar: cada camino responde una pregunta distinta y te dice por qué.

Otra forma de comprenderlo

✦ Explorar el universo completo
Explora temas relacionados

Conceptos

Comentarios

Inicia sesión para comentar.

Todavía no hay comentarios. Sé la primera persona en opinar.