0Pricing
SQL Interview Prep · Lección

SUM y AVG con valores NULL

Descubra por qué AVG ignora los valores NULL y cómo cambia eso la respuesta que esperan los entrevistadores

SUM y AVG con valores NULL es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.

La trampa oculta en AVG

Este es un clásico de las entrevistas que deja en evidencia a los candidatos descuidados: «Tiene una columna de salarios con algunos NULL. ¿Qué calcula AVG(salary) y es eso lo que necesita el negocio?»

La respuesta sincera revela si comprende que las funciones de agregación ignoran los NULL, lo que cambia el denominador de un promedio. Si se equivoca en producción, el promedio informado se inflará silenciosamente.

Hagamos que el comportamiento resulte inequívoco.

Datos de ejemplo

Utilice esta tabla employees con una columna bonus que admite NULL durante toda la lección:

  • Alice, bonificación 100
  • Bob, bonificación 200
  • Carol, bonificación NULL
  • Dan, bonificación 300

Hay cuatro filas, tres bonificaciones no NULL y una NULL. Aplicaremos SUM y AVG a estos datos para observar cómo se tratan los NULL.

SUM omite los NULL

SUM(bonus) suma únicamente los valores no NULL: 100 + 200 + 300 = 600. La fila con NULL no aporta nada; simplemente se omite, no se trata como cero en el sentido aritmético de modificar el recuento.

En la práctica, el efecto es el mismo que tratar NULL como un valor ausente. SUM nunca produce un error por los NULL y nunca devuelve NULL a menos que todas las entradas sean NULL.

SELECT SUM(bonus) AS total_bonus
FROM employees;
-- returns 600

AVG también omite los NULL

AVG(bonus) es la parte crucial. Calcula la suma de los valores no NULL dividida entre la cantidad de valores no NULL: 600 / 3 = 200.

El denominador es 3, no 4. La fila con NULL se excluye tanto del numerador como del divisor. Precisamente por eso AVG puede sorprender: el promedio se calcula sobre los valores presentes, no sobre todas las filas.

SELECT AVG(bonus) AS avg_bonus
FROM employees;
-- 600 / 3 = 200, NOT 600 / 4 = 150

Por qué importa el denominador

Suponga que el significado empresarial de una bonificación NULL es «no recibió ninguna bonificación» = 0. En ese caso, el promedio real debería ser 600 / 4 = 150, pero AVG(bonus) informa 200.

La respuesta correcta en una entrevista sería: «AVG ignora los NULL, por lo que calcula el promedio entre los empleados que tienen una bonificación. Si NULL significa cero, primero debo convertir los NULL en 0». Explicar esta diferencia es lo que le permite obtener el punto.

Convertir los NULL en cero con COALESCE

Para calcular el promedio de todas las filas tratando NULL como 0, incluya la columna en COALESCE(bonus, 0). Ahora cada fila tiene un valor numérico, por lo que el denominador pasa a ser 4.

El resultado es 600 / 4 = 150. La lección es la siguiente: AVG(col) y AVG(COALESCE(col, 0)) responden a preguntas empresariales distintas. Elija de forma deliberada.

SELECT AVG(COALESCE(bonus, 0)) AS avg_over_all
FROM employees;
-- 600 / 4 = 150

AVG = SUM / COUNT, con cuidado

Una identidad útil: AVG(col) equivale a SUM(col) / COUNT(col) — observe que se utiliza COUNT(col), no COUNT(*), porque tanto AVG como ese COUNT omiten los NULL.

Si escribe por error SUM(col) / COUNT(*), obtiene el promedio sobre todas las filas (150 en este caso), que difiere de AVG (200). A veces los entrevistadores le piden reconstruir AVG manualmente para comprobar si elige el COUNT correcto.

SELECT
  AVG(bonus)                       AS builtin_avg,   -- 200
  SUM(bonus) * 1.0 / COUNT(bonus)  AS manual_avg,    -- 200
  SUM(bonus) * 1.0 / COUNT(*)      AS over_all_rows  -- 150
FROM employees;

Trampa de la división entera

Un error sutil al calcular promedios manualmente: en muchas bases de datos, dividir dos enteros realiza una división entera, truncando los decimales. 7 / 2 puede producir 3, no 3.5.

AVG normalmente devuelve un decimal, pero si lo reconstruye con SUM / COUNT sobre columnas enteras, puede perder precisión. Multiplique por 1.0 o convierta primero el valor a un tipo decimal.

SELECT
  SUM(bonus) / COUNT(bonus)        AS maybe_truncated,
  SUM(bonus) * 1.0 / COUNT(bonus)  AS precise
FROM employees;

Cuando todo es NULL

Este es un caso límite que encanta a los entrevistadores: ¿qué ocurre si todos los valores son NULL o si el filtro no coincide con ninguna fila?

  • SUM devuelve NULL (no 0) cuando no hay entradas no NULL.
  • AVG también devuelve NULL, ya que dividir entre cero valores no está definido.
  • COUNT, en cambio, devuelve 0.

Incluya el resultado en COALESCE(SUM(col), 0) si necesita un valor numérico predeterminado.

SELECT COALESCE(SUM(bonus), 0) AS safe_total
FROM employees
WHERE 1 = 0;  -- no rows: returns 0, not NULL

Promedios por grupo

Las mismas reglas sobre NULL se aplican dentro de GROUP BY. El AVG de cada grupo se divide entre la cantidad de valores no NULL de ese grupo. Un grupo compuesto exclusivamente por bonificaciones NULL produce AVG = NULL para ese grupo.

Por tanto, cuando observe promedios por departamento inesperados, sospeche primero que los NULL están reduciendo los denominadores individuales antes de sospechar de un error de join.

SELECT department, AVG(bonus) AS avg_bonus
FROM employees
GROUP BY department;

Cómo formular la respuesta

Una respuesta bien formulada en una entrevista sería: «SUM y AVG ignoran los NULL. AVG divide entre la cantidad de valores no NULL, por lo que los NULL reducen efectivamente el denominador. Si NULL debe contar como cero, lo convierto mediante COALESCE antes de agregar; de lo contrario, el promedio refleja únicamente las filas que tienen un valor».

Esa única frase demuestra corrección, comprensión del contexto empresarial y conocimiento de la solución.

Comprobación rápida

Aplique la regla a los datos de ejemplo.

Resumen

Conclusiones clave sobre SUM y AVG con NULL:

  • Ambas funciones ignoran por completo los NULL.
  • AVG(col) = SUM(col) / COUNT(col) — el denominador excluye los NULL.
  • Utilice COALESCE(col, 0) cuando NULL signifique cero y deba contar.
  • Las entradas con todo NULL o sin filas hacen que SUM y AVG devuelvan NULL (COUNT devuelve 0).
  • Tenga cuidado con la división entera al reconstruir AVG manualmente.

A continuación: MIN, MAX y la agregación de datos no numéricos.

Preguntas frecuentes

¿La lección «SUM y AVG con valores NULL» es gratis?

Sí — el texto completo de «SUM y AVG con valores NULL» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «SUM y AVG con valores NULL»?

Descubra por qué AVG ignora los valores NULL y cómo cambia eso la respuesta que esperan los entrevistadores Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Interview Prep?

No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «SUM y AVG con valores NULL»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?

Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT)
  2. SUM y AVG con valores NULL
  3. MIN, MAX y agregación no numérica
  4. Agregaciones sin GROUP BY
← Volver a SQL Interview Prep