Módulo 3 · Organizar y resumir

Resume datos con COUNT, SUM, AVG, MIN y MAX

Convierte muchas filas en una respuesta numérica fácil de interpretar.

22 minNivel InicialAntes necesitas: SELECT y filtros

0 de 45 lecciones

Al terminar, podrás

  • Elegir la agregación adecuada para una pregunta.
  • Distinguir COUNT(*) de COUNT(columna).
  • Filtrar las filas antes de calcular un resumen.

Recupera lo aprendido: ¿Qué filas participan en el cálculo si la consulta tiene WHERE?

La idea clave

Una función de agregación recibe varias filas y devuelve un resumen. COUNT cuenta, SUM suma, AVG calcula la media y MIN/MAX localizan los extremos.

Modelo mental: primero decide qué filas entran en el cálculo; después elige qué pregunta numérica quieres responder. Sin GROUP BY, todas las filas filtradas forman un único conjunto.

La sintaxis básica

Estructura
SELECT COUNT(*) AS filas,
       SUM(columna) AS total,
       AVG(columna) AS media,
       MIN(columna) AS minimo,
       MAX(columna) AS maximo
FROM tabla
WHERE condición;

COUNT(*) cuenta filas. En cambio, COUNT(columna), SUM, AVG, MIN y MAX ignoran los valores NULL de su argumento.

Elige la función a partir de la pregunta
PreguntaFunción
¿Cuántas filas hay?COUNT(*)
¿Cuántos valores conocidos hay?COUNT(columna)
¿Cuál es el total?SUM(columna)
¿Cuál es la media?AVG(columna)
¿Cuál es el menor o el mayor?MIN(columna) / MAX(columna)

Comprobación con los datos del curso: COUNT(*) sobre clientes devuelve 12, pero COUNT(email) devuelve 9 porque tres correos son NULL. Decide primero si quieres contar filas o valores conocidos.

Si no hay filas: en una agregación sin GROUP BY, COUNT(*) devuelve 0; SUM, AVG, MIN y MAX devuelven NULL. Una suma sin datos no equivale automáticamente a cero. ROUND(valor, 2), usado a continuación, redondea el cálculo a dos decimales.

Ejemplo paso a paso

Pedidos utilizados en el cálculo; se omiten aquí los tres cancelados
idestadototal
101enviado128,40
102pendiente49,50
104enviado179,00
105pendiente69,90
106enviado1088,00
107enviado36,90
109pendiente89,00
110enviado61,50
111pendiente249,00
112enviado54,00
113enviado98,00
114pendiente203,90
115enviado24,00
117enviado148,90
118pendiente179,00

Queremos resumir únicamente los pedidos que no están cancelados.

SQL
SELECT COUNT(*) AS pedidos_validos,
       ROUND(SUM(total), 2) AS total,
       ROUND(AVG(total), 2) AS media,
       MIN(total) AS minimo,
       MAX(total) AS maximo
FROM pedidos
WHERE estado <> 'cancelado';
Resultado esperado
pedidos_validostotalmediaminimomaximo
152659,00177,2724,001088,00

Cómo funciona

  1. WHERE retira los tres pedidos cancelados.
  2. Las cinco funciones reciben las mismas quince filas restantes.
  3. Cada agregación responde una pregunta distinta y todas aparecen en una sola fila.
  4. ROUND redondea suma y media a dos decimales; no cambia los datos almacenados ni obliga al visor a mostrar ceros finales.
Comprueba tu comprensión

¿Qué devuelve COUNT(email) cuando una fila tiene email NULL?

Un error habitual

Mezclar detalle y resumen sin agrupar

Ejemplo problemático
SELECT estado, AVG(total)
FROM pedidos;

estado describe una fila concreta, mientras que AVG(total) resume muchas. En SQL portable debes agrupar por estado o retirar esa columna. Algunos motores toleran columnas sueltas y eligen un valor arbitrario, pero ese resultado no expresa una regla fiable.

Practica con datos

Laboratorio SQL

Resuelve la consulta

Pendiente

Escribe una consulta que calcule en una sola fila la suma y la media de los pedidos no cancelados, con alias total y media.

Resultado esperado: 1 fila con total, media. El orden de las filas no importa.

Ver tablas y datos

Cargando la estructura del ejercicio…

La consulta usa datos ficticios y se ejecuta solo en este navegador.

Fuentes técnicas consultadas

Las referencias describen cómo una agregación resume un conjunto de entrada y cómo las funciones habituales tratan los valores NULL.

Comprueba si puedes explicarlo

En un conjunto de tres filas con importes 10, NULL y 20, ¿cuánto dan COUNT(*), COUNT(importe) y AVG(importe)?

Ver respuesta razonada

Dan 3, 2 y 15. COUNT(*) cuenta todas las filas; las otras dos funciones ignoran el importe ausente. Dividir entre tres trataría implícitamente ese NULL como cero.

Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.

Qué debes recordar

  • Sin GROUP BY, las filas filtradas forman un único conjunto.
  • COUNT(*) cuenta filas; COUNT(columna) omite los valores NULL.
  • No mezcles columnas de detalle con agregaciones sin definir los grupos.

A continuación: Continúa con Crea resúmenes por grupo con GROUP BY.

Conceptos relacionados