DÍA 31Fechas y funciones de ventana · SQL para Análisis de Datos

Construye resúmenes temporales y distingue meses sin filas de meses con total cero.

Día 31 18 minIntermedio

Agrupar por periodo y detectar meses ausentes

Objetivos

Al terminar podrás resumir fechas por periodo y explicar qué significa que una etiqueta temporal no aparezca.

Concepto

DATE_FORMAT(payment_date, '%Y-%m') crea una etiqueta de año y mes. Al agrupar por esa expresión, MySQL devuelve los periodos que tienen filas en payment.

Un mes ausente no es un grupo con importe cero: significa que la consulta no encontró filas para formar ese grupo. Para mostrar todos los meses de un calendario necesitas una tabla de periodos y una unión externa; el resumen por sí solo no los inventa.

Ejemplo

SELECT
  DATE_FORMAT(payment_date, '%Y-%m') AS payment_month,
  COUNT(*) AS payment_count,
  ROUND(SUM(amount), 2) AS total_amount
FROM payment
GROUP BY DATE_FORMAT(payment_date, '%Y-%m')
ORDER BY payment_month;

Cada fila resume un mes observado. La cuenta y el importe describen las filas de pago presentes, no un calendario completo ni los meses sin actividad.

Práctica guiada

  1. Añade COUNT(DISTINCT customer_id) como otra medida del periodo.
  2. Filtra un año con un intervalo semiabierto y compara cuántos grupos aparecen.
  3. Escribe qué datos necesitarías para mostrar meses sin registros.

Reto

Resume por mes el conteo y promedio de pagos. Mantén el orden cronológico y redacta una nota que explique por qué el resultado no contiene periodos vacíos.

Ver respuesta al reto
SELECT DATE_FORMAT(payment_date, '%Y-%m') AS payment_month,
       COUNT(*) AS payment_count,
       ROUND(AVG(amount), 2) AS average_amount
FROM sakila.payment
GROUP BY DATE_FORMAT(payment_date, '%Y-%m')
ORDER BY payment_month;

Solo aparecen meses que tienen pagos. Para mostrar meses vacíos se necesita una tabla calendario y un LEFT JOIN.

Quiz

1. ¿Qué significa que un mes no aparezca en una consulta con GROUP BY?
2. ¿Qué función asigna una posición única a cada fila?
3. ¿Qué aporta PARTITION BY a una función de ventana?

Comprobación

Ya distingues periodos observados de periodos vacíos. La siguiente lección compara tres formas de numerar un ranking.

TU PROGRESO

Cargando estado…