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

Distingue pagos de clientes y compara totales antes y después de una unión.

Día 19 20 minIntermedio

Contar entidades y reconciliar resultados

Objetivos

Al terminar podrás distinguir la cantidad de pagos de la cantidad de clientes y verificar que una unión no cambie sus métricas.

Concepto

COUNT(*) cuenta filas; COUNT(DISTINCT customer_id) cuenta clientes con al menos un pago. Son medidas distintas. Cuando unes pagos con clientes, verifica conteos, claves e importes usando la misma población en ambos lados.

Esta comparación supone que cada customer_id del pago encuentra una fila única en customer. Si no coincide, un INNER JOIN puede eliminar pagos; si la tabla de clientes tiene claves repetidas, la unión puede multiplicarlos.

Ejemplo

Primero resume los pagos antes de unir tablas:

SELECT
  COUNT(*) AS payment_rows,
  COUNT(DISTINCT payment_id) AS payment_keys,
  COUNT(DISTINCT customer_id) AS paying_customers,
  ROUND(SUM(amount), 2) AS payment_amount
FROM payment;

Ahora calcula las mismas medidas después de unir cada pago con su cliente:

SELECT
  COUNT(*) AS payment_rows,
  COUNT(DISTINCT p.payment_id) AS payment_keys,
  COUNT(DISTINCT p.customer_id) AS paying_customers,
  ROUND(SUM(p.amount), 2) AS payment_amount
FROM payment AS p
INNER JOIN customer AS c
  ON c.customer_id = p.customer_id;

Cada consulta devuelve una fila resumen. Compara columna por columna: si todos los pagos encuentran exactamente un cliente, las filas, claves, clientes e importes coinciden entre ambas salidas. Una diferencia señala algo que investigar en la relación o en la población; no la ocultes con DISTINCT sin saber qué pasó.

Práctica guiada

  1. Anota el valor de payment_rows en ambas salidas y calcula la diferencia.
  2. Cambia COUNT(DISTINCT customer_id) por COUNT(*) y explica qué entidad se está contando ahora.
  3. Diseña un conteo de pagos sin cliente coincidente para investigar una diferencia.

Reto

Compara COUNT(*) con COUNT(DISTINCT film_id) en film_category. Explica qué representa cada cifra y por qué un título puede estar relacionado con más de una categoría.

Quiz

¿Qué expresa COUNT(DISTINCT customer_id) en payment?

  • A. Todos los pagos, incluyendo los repetidos del mismo cliente.
  • B. Los clientes diferentes que aparecen en las filas de pago.
  • C. El número de filas de customer sin pagos.

Respuesta: B. DISTINCT cuenta cada valor de cliente una vez.

Comprobación

Ya reconciliaste conteos y sumas de un JOIN. En el módulo siguiente clasificarás valores derivados y conservarás el significado de los datos ausentes.

TU PROGRESO

Cargando estado…