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
- Anota el valor de
payment_rowsen ambas salidas y calcula la diferencia. - Cambia
COUNT(DISTINCT customer_id)porCOUNT(*)y explica qué entidad se está contando ahora. - 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
customersin 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.