Contar y resumir pagos
Objetivos
Pasarás de mostrar pagos individuales a producir unas pocas métricas que resumen toda la tabla.
Concepto
COUNT(*) cuenta filas. COUNT(columna) cuenta solo las filas donde esa columna no es NULL. SUM suma valores y AVG calcula el promedio.
En payment, rental_id puede ser NULL. Por eso comparar COUNT(*) y COUNT(rental_id) permite contar pagos y pagos enlazados a un alquiler sin inventar una fila por cliente.
Ejemplo
SELECT
COUNT(*) AS payment_rows,
COUNT(rental_id) AS payments_with_rental,
COUNT(*) - COUNT(rental_id) AS payments_without_rental,
COUNT(DISTINCT customer_id) AS customers_with_payments,
ROUND(SUM(amount), 2) AS total_amount,
ROUND(AVG(amount), 2) AS average_payment
FROM payment;Sin GROUP BY, las funciones resumen todas las filas que pasaron los filtros. COUNT(DISTINCT customer_id) cuenta personas únicas, aunque un cliente haya pagado varias veces.
Nota
Cuida la interpretación: total_amount representa la suma de los pagos de esta tabla. Antes de llamarlo ventas por tienda o por película, hacen falta las relaciones y reglas correctas para atribuir cada pago.
Práctica guiada
- Quita las columnas calculadas y deja solo
COUNT(*). - Cambia
COUNT(rental_id)porCOUNT(staff_id); compara lo que cada conteo significa. - Agrega
MIN(amount)yMAX(amount)para ver los extremos.
Reto
Resume la tabla payment con número de filas, importe mínimo, máximo y promedio redondeado a dos decimales. Pon nombres claros a todas las columnas de salida.
Quiz
¿Qué cuenta COUNT(rental_id) cuando rental_id puede ser NULL?
- A. Todas las filas, incluidas las nulas.
- B. Solo las filas que tienen un
rental_id. - C. Los identificadores distintos de cliente.
Respuesta: B. COUNT(columna) excluye los valores NULL de esa columna.
Comprobación
El resumen actual produce una fila para toda la tabla. En la siguiente lección dividirás esas métricas por cliente usando GROUP BY.