Diferenciar COUNT(*), COUNT(columna) y COUNT(DISTINCT columna).
Entender cómo tratan los NULL las funciones de grupo.
Combinar agregaciones con WHERE y con expresiones (ROUND, restas, porcentajes).
Las funciones de agregación (o de grupo) reciben muchas filas y devuelven un solo
valor. Sin GROUP BY resumen toda la tabla (o las filas que pasan el WHERE) en una sola
fila de resultado.
Regla clave: las funciones de grupo ignoran los NULL, salvo COUNT(*), que cuenta filas. Por eso
AVG(commission_pct) promedia solo a quienes tienen comisión, y COUNT(commission_pct) cuenta
solo los valores no nulos.
Sintaxis
SELECT COUNT(*), COUNT(DISTINCT col),
SUM(col), ROUND(AVG(col), 2),
MIN(col), MAX(col)
FROM tabla
WHERE condición;
COUNT(*)
Cuenta filas, incluidas las que tienen NULL.
COUNT(col)
Cuenta valores no nulos de la columna.
COUNT(DISTINCT col)
Cuenta valores distintos (no nulos).
SUM / AVG
Suma y promedio de valores numéricos, ignorando NULL.
MIN / MAX
Extremos; también funcionan con textos y fechas.
WHERE antes
El WHERE filtra filas antes de agregar.
1 · Ejemplos guiados · ejecuta y modifica cada bloque
01Contar filas
Total de empleados.
sql-agregacion.sql
Presiona «ejecutar» para ver el resultado.
02COUNT(*) vs COUNT(columna) vs COUNT(DISTINCT)
102 filas, pero solo 31 con comisión y 19 cargos distintos.
sql-agregacion.sql
Presiona «ejecutar» para ver el resultado.
03Resumen salarial
Promedio redondeado, máximo, mínimo y suma de todos los salarios.
sql-agregacion.sql
Presiona «ejecutar» para ver el resultado.
04Agregar con filtro
La agregación respeta el WHERE: solo suma el departamento 80 (Ventas).
sql-agregacion.sql
Presiona «ejecutar» para ver el resultado.
05MIN y MAX con fechas y textos
La primera y la última contratación, y el primer apellido en orden alfabético.
sql-agregacion.sql
Presiona «ejecutar» para ver el resultado.
06Los NULL y el promedio
AVG(commission_pct) divide solo entre quienes tienen comisión. Si quieres contar a todos, convierte NULL en 0.
sql-agregacion.sql
Presiona «ejecutar» para ver el resultado.
⚠ Errores frecuentes
Poner una función de grupo en el WHERE (WHERE AVG(salary) > 5000): es un error; eso se filtra con HAVING.
Mezclar columnas sueltas con agregaciones sin GROUP BY (SELECT first_name, MAX(salary)). Oracle y PostgreSQL lo rechazan.
Olvidar que AVG ignora los NULL y sacar conclusiones equivocadas del promedio.
Esperar decimales de SUM o COUNT: si necesitas proporciones, multiplica por 1.0 o usa 100.0 *.
2 · Retos con corrección automática
Escribe tu solución y pulsa comprobar (Ctrl + Enter). Tu consulta y la solución se ejecutan
en bases limpias y se comparan los resultados: no importan los nombres de las columnas, sí los datos (y el
orden, cuando el reto lo pide). Si te atascas, usa la pista o mira el resultado esperado.
3 · Preguntas tipo solemne
1. La tabla tiene 102 filas y 31 tienen commission_pct. ¿Qué devuelve COUNT(commission_pct)?
COUNT(columna) cuenta solo los valores no nulos.
2. ¿Cuál consulta obtiene el precio promedio de la tabla productos?
La función estándar es AVG; el alias le da un nombre al resultado (ejercicio de la clase 10).
3. ¿Por qué falla SELECT department_id FROM employees WHERE AVG(salary) > 8000;?
WHERE filtra filas antes de agrupar. Para filtrar por un agregado se usa GROUP BY + HAVING.