DÍA 17Agregaciones · SQL para Análisis de Datos

Selecciona clientes según una métrica agregada sin confundir HAVING con WHERE.

Día 17 16 minInicial

Filtrar grupos con HAVING

Objetivos

Vas a elegir clientes que superan un umbral de pagos y a ubicar cada condición en la etapa correcta de la consulta.

Concepto

WHERE quita filas antes de formar los grupos. HAVING quita grupos después de calcular sus agregados; por eso puede evaluar COUNT(*) o SUM(amount).

Escribe primero la pregunta: “¿qué clientes hicieron al menos diez pagos?”. La cantidad de pagos no existe en una sola fila de origen, así que se compara después de agrupar.

Ejemplo

SELECT
  customer_id,
  COUNT(*) AS payment_count,
  ROUND(SUM(amount), 2) AS total_paid
FROM payment
WHERE amount > 0
GROUP BY customer_id
HAVING COUNT(*) >= 10
ORDER BY payment_count DESC, customer_id ASC
LIMIT 10;

WHERE amount > 0 filtra pagos individuales. HAVING COUNT(*) >= 10 conserva grupos cuyo número de pagos llega al umbral. La condición de WHERE es pedagógica y no afirma que los pagos válidos deban tener ese criterio de negocio.

Nota

Recuerda: no pongas una condición sobre una fila individual en HAVING si puede ir en WHERE. Reserva HAVING para el resultado agregado del grupo.

Práctica guiada

  1. Cambia el umbral de diez a cinco y predice cómo cambia el conjunto de clientes.
  2. Quita HAVING y compara cuántos grupos aparecen.
  3. Cambia la condición por HAVING COUNT(*) > 1 para encontrar clientes con pagos repetidos.

Reto

Encuentra clientes con más de un pago y un importe acumulado mayor que 100. Devuelve customer_id, cantidad de pagos y total. Ordena por total descendente. Explica por qué las dos condiciones van en HAVING.

Quiz

¿Dónde va la condición “al menos diez pagos por cliente”?

  • A. En WHERE, porque se evalúa antes del grupo.
  • B. En HAVING, porque usa el conteo del grupo.
  • C. En ORDER BY, porque ordena los pagos.

Respuesta: B. HAVING filtra usando el resultado de una función agregada.

Comprobación

Ya separas el filtrado de filas del filtrado de grupos. El siguiente módulo agrega lógica condicional y consultas organizadas para análisis.

TU PROGRESO

Cargando estado…