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
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.
| Pregunta | Funció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
| id | estado | total |
|---|---|---|
| 101 | enviado | 128,40 |
| 102 | pendiente | 49,50 |
| 104 | enviado | 179,00 |
| 105 | pendiente | 69,90 |
| 106 | enviado | 1088,00 |
| 107 | enviado | 36,90 |
| 109 | pendiente | 89,00 |
| 110 | enviado | 61,50 |
| 111 | pendiente | 249,00 |
| 112 | enviado | 54,00 |
| 113 | enviado | 98,00 |
| 114 | pendiente | 203,90 |
| 115 | enviado | 24,00 |
| 117 | enviado | 148,90 |
| 118 | pendiente | 179,00 |
Queremos resumir únicamente los pedidos que no están cancelados.
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';| pedidos_validos | total | media | minimo | maximo |
|---|---|---|---|---|
| 15 | 2659,00 | 177,27 | 24,00 | 1088,00 |
Cómo funciona
WHEREretira los tres pedidos cancelados.- Las cinco funciones reciben las mismas quince filas restantes.
- Cada agregación responde una pregunta distinta y todas aparecen en una sola fila.
ROUNDredondea suma y media a dos decimales; no cambia los datos almacenados ni obliga al visor a mostrar ceros finales.
Un error habitual
Mezclar detalle y resumen sin agrupar
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
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…
Todas las filas elegidas deben resumirse en una sola fila: no necesitas GROUP BY.
Excluye estado = 'cancelado' con WHERE antes de aplicar SUM y AVG.
Usa SUM(total) AS total y AVG(total) AS media. No redondees la media en esta práctica.
Solución
SELECT SUM(total) AS total, AVG(total) AS media FROM pedidos WHERE estado <> 'cancelado';WHERE filtra primero las filas y las agregaciones resumen únicamente los pedidos restantes.
Puedes consultar la solución y volver a intentarlo. La práctica se completa cuando tu consulta funciona.
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.
- PostgreSQL: funciones de agregación
- PostgreSQL: expresiones de agregación
- SQLite: funciones de agregación incorporadas
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.