La agregación de datos es esencial para el análisis de información, ya que permite resumir volúmenes de datos mediante totales o agrupaciones relevantes para el negocio. Para lograr esta agregación, utilizamos funciones específicas dentro del lenguaje SQL estándar, el cual facilitan extraer totales y resúmenes útiles para diversos reportes e inteligencia empresarial.
¿Cómo se utiliza la función MAX?
La función MAX se emplea para identificar el valor máximo de un conjunto de datos en una tabla. Por ejemplo, si deseamos determinar el precio máximo de alquiler de una película, realizaremos la operación siguiendo pasos precisos:
SELECTMAX(rental_price)FROM movies;
En este caso, seleccionamos el precio máximo de renta de la tabla movies, que nos revela cuál es la película más cara para alquilar. Este tipo de consulta nos puede proporcionar insights sobre los precios más altos manejados en un catálogo de películas.
¿Qué significa agrupar datos en SQL?
Agrupar datos es posible mediante el uso de la cláusula GROUP BY, permitiendo generar reportes más detallados asociando las agrupaciones a un atributo específico. Supongamos que buscamos conocer el precio máximo por título de película; entonces se procesaría así:
SELECT title,MAX(rental_price)FROM movies
GROUPBY title;
Con este enfoque, se puede explorar la relación entre cada título y su precio máximo dentro de nuestra tabla.
¿Cómo se pueden calcular sumas y promedios?
La función SUM permite calcular el total, mientras que AVG obtiene un promedio. Estos son esenciales en contextos donde necesitas evaluar costos o rendimientos acumulados.
Para sumar el total de precios de alquiler de todas las películas:
SELECTSUM(rental_price)FROM movies;
Para analizar el costo promedio de alquiler de una película:
SELECTAVG(rental_price)FROM movies;
¿Qué función tiene el conteo de elementos?
COUNT es la función que te permite cuantificar cuántas ocurrencias hay de un determinado elemento. Es útil para conocer volúmenes, como cuántas películas pertenecen a una categoría específica:
SELECT classification,COUNT(*)FROM movies
GROUPBY classification;
Esto sirve para verificar cuántas películas hay disponibles en distintas clasificaciones, lo cual podría ayudar a identificar áreas del catálogo que podrían necesitar un mayor equilibrio.
¿Cuáles son las aplicabilidades de estos métodos?
Mediante estas funciones de agregación, se pueden desarrollar reportes que arrojen luz sobre diversos aspectos del negocio. Ejemplos de este tipo de insights incluyen:
Ajustes de catálogo: Saber qué categorías son populares o están faltando.
Revisión de precios: Detectar grandes disparidades en precios de alquiler.
Comportamiento de clientes: Entender cómo y cuándo se rentan y retornan las películas.
Consejo Práctico: Experimenta con otras tablas que tengas disponibles. Intenta calcular máximos, mínimos, promedios o sumas en contextos inéditos para comprender cómo puedes aplicar estos conceptos a otros conjuntos de datos. ¡Compártelo en los comentarios!
En este mundo dinámico, el dominio de técnicas de agregación de datos no solo potencia tus habilidades analíticas, sino que también te arma con las herramientas necesarias para tomar decisiones informadas en cualquier nivel de tu organización. ¡Adelante, sigue explorando!
Agregación de Datos en SQL: Max, Min, Suma y Promedio
opino lo mismo, aunque estuvo bien el modulo de Que es la Ciencia de Datos, de resto, removeria los modulos anteriores, aun mas teniendo en cuenta que para ello hay una Ruta de Aprendizaje donde en cursos anteriores se ha dado eso, pero bueno, sirve para enfatizar y reforzar los conocimientos
Empezando con la hipótesis de que en 'la ciudad donde haya más clientes, tendremos más ventas'.
Empezaría consultando clientes por ciudad.
SELECT ciudad,COUNT(cliente_id)AS n
FROM clientes AS c
INNERJOIN direcciones AS d ON c.direccion_id= d.direccion_idINNERJOIN ciudades AS ci ON d.ciudad_id= ci.ciudad_idGROUPBY ciudad
ORDERBY n DESC
Tendríamos como resultado que Londres y Aurora deberían competir para cumplir con está hipótesis
SELECT ciudad,SUM(precio_renta)AS ventas
FROM peliculas AS p
INNERJOIN inventarios AS i ON p.pelicula_id= i.pelicula_idINNERJOIN rentas AS r ON i.inventario_id= r.inventario_idINNERJOIN clientes AS c ON r.cliente_id= c.cliente_idINNERJOIN direcciones AS d ON c.direccion_id= d.direccion_idINNERJOIN ciudades AS ci ON d.ciudad_id= ci.ciudad_idGROUPBY ciudad
ORDERBY ventas DESC;
Justamente sale Aurora como ganador pero eso no aprueba nuestra hipótesis porque Londres debería estar de segundo lugar o primero pero sale como apenas sexto, entonces podríamos llegar a la conclusión que deberíamos ver cuantas películas se rentaron por ciudad y a que precio.
mi hipotesis era poder ver cuales clientes eran los que mas habian rentado este es el Query y la imagen
SELECTCONCAT(c.nombre,' ', c.apellido)AS nombre_completo,SUM(cantidad)AS pago_total
FROM clientes AS c
INNERJOIN pagos AS p
USING(cliente_id)GROUPBY cliente_id
ORDERBY pago_total DESCLIMIT10;
1) Cantidad de películas en ingles```txt
SELECT COUNT(*)
FROM (
SELECT p.titulo, p.lenguaje_id, l.nombre AS lenguaje
FROM peliculas AS p
LEFT JOIN lenguajes AS l
ON p.lenguaje_id = l.lenguaje_id
) AS cuenta_peliculas_ingles
WHERE lenguaje = 'English';
```js
SELECT c.cliente_id, CONCAT(c.nombre, ' ', c.apellido) as cliente, SUM(p.cantidad) AS pagado_cliente
FROM clientes AS c
INNER JOIN pagos AS p
ON c.cliente_id = p.cliente_id
GROUP BY c.cliente_id
ORDER BY pagado_cliente DESC
LIMIT 5;
```3) Clientes que mas rentaron películas
```js
SELECT c.cliente_id, CONCAT(c.nombre, ' ', c.apellido), COUNT(*) AS cantidad_peliculas_rentadas FROM clientes AS c
INNER JOIN rentas AS r
ON c.cliente_id = r.cliente_id
GROUP BY c.cliente_id
ORDER BY cantidad_peliculas_rentadas DESC
LIMIT 5;
```4) Actores que han participado en mas películas
```js
SELECT a.actor_id, CONCAT(a.nombre, ' ', a.apellido), COUNT(a.actor_id) AS apariciones
FROM peliculas_actores AS pa
INNER JOIN actores AS a
ON pa.actor_id = a.actor_id
GROUP BY a.actor_id
ORDER BY apariciones DESC
LIMIT 5;
```5) Clasificación de películas mas vistas por ciudad
```txt
SELECT ciudad, clasificacion, total FROM(
SELECT city.ciudad, p.clasificacion, COUNT(*) AS total,
RANK() OVER(PARTITION BY ciudad ORDER BY COUNT(*) DESC)
FROM clientes AS c
INNER JOIN direcciones AS d
ON c.direccion_id = d.direccion_id
INNER JOIN ciudades AS city
ON d.ciudad_id = city.ciudad_id
INNER JOIN rentas AS r
ON c.cliente_id = r.cliente_id
INNER JOIN inventarios AS inv
ON r.inventario_id = inv.inventario_id
INNER JOIN peliculas AS p
ON inv.pelicula_id = p.pelicula_id
GROUP BY city.ciudad, p.clasificacion
ORDER BY total DESC
) AS lastt
WHERE RANK = 1;
```En el 5 me copie del RANK que ya habían usado, casi no me sale.
Hola Javier, al revisar la BD me di cuenta que todas las películas están en inglés (id=1). Suponiendo que hay películas en varios idiomas el query quedaría así:
SELECT l.nombre AS idioma, COUNT(p.titulo) AS total_peliculas
FROM lenguajes AS l
INNER JOIN peliculas AS p
ON l.lenguaje_id = p.lenguaje_id
GROUP BY idioma;
La agregación de datos generalmente funciona en grandes bases de datos que no proporcionan mucho valor de información por sí solos. Los procesos clave de la agregación de datos son la recopilación, utilización y presentación de datos que están disponibles y presentes globalmente.
Se me ocurrio mirar cual era el empleado que mas ventas concretaba y me termine dando cuenta de que hay que echar a Dave, Erika y Edna, ya que no concretaron ninguna jaja.
Esta fue la query que utilice !
SELECT empleados.nombre, empleados.apellido, SUM(pagos.cantidad) AS total_ventas
FROM empleados
LEFT JOIN pagos
ON empleados.empleado_id = pagos.empleado_id
GROUP BY empleados.nombre, empleados.apellido
ORDER BY total_ventas DESC;
Hola Alejandro, así obtuve mi resultado aunque siento que muy bajas las cifras. Que en una ciudad sólo tres personas hayan visto una pelicula? Claro está que el número de ciudades es muy alta.
AS peliculas_totales
FROM actores a, peliculas_actores pa
WHERE a.actor_id= pa.actor_idGROUPBY a.nombre, pa.actor_idORDERBY peliculas_totales DESCLIMIT5;
Hola amigos. Resolví el mismo interrogante que ustedes, de otra forma y me da lo mismo que ustedes salvo en un detalle. Cuando lo hago con este código:
La actriz que actúa en más películas es Susan Davis con 54, es el único dato diferente, cosa que con su código no aparece. Me puse a mirar a detalle y es que hay dos actores_id con el mismo nombre aunque diferente id y esta sumandolos como si fuesen uno.
Número de películas que están en inglés.
Al revisar la tabla de películas me di cuenta que todas son en ingles, ahora bien de haber películas en otros idiomas, el query seria el siguiente.
SELECTCOUNT(a.pelicula_id)AS total_peliculas_ingles, b.lenguaje_idFROM peliculas AS a
INNERJOIN lenguajes AS b ON a.lenguaje_id= b.lenguaje_idGROUPBY b.lenguaje_idHAVING b.lenguaje_id=1;
TOP 5 de clientes que más gastaron en renta de películas
SELECT cliente_id,SUM(cantidad)AS total_gastado
FROM pagos
GROUPBY cliente_id
ORDERBY total_gastado DESCLIMIT5;
4.TOP 5 actores que han participado en más películas
SELECTCONCAT(c.nombre,' ',c.apellido)AS actores,c.actor_id,COUNT(a.pelicula_id)AS total_peliculas
FROM peliculas AS a
INNERJOIN peliculas_actores AS b ON a.pelicula_id= b.pelicula_idINNERJOIN actores AS c ON b.actor_id= c.actor_idGROUPBY actores, c.actor_idORDERBY total_peliculas DESCLIMIT5;
5.Clasificación de películas más vistas por ciudad.
Debo reconocer que este ultimo query fue desafiante y divertido, logre hacer los join sin problema, una vez teniendo los datos de interés, lo que se me ocurrió, fue utilizar una Window functions, sin embargo no obtuve los datos deseados, así que termine apoyándome con el código del compañero Alejandro Jose Ysea Gonzalez.
SELECT ciudad, clasificacion
FROM(SELECT ciudad, clasificacion,count(renta_id)AS cantidad_rentada,rank()over(partition By ciudad order by count(*) desc)as ranking_ciudad
FROM(SELECT f.ciudad, d.cliente_id, c.renta_id, a.pelicula_id, a.clasificacionFROM peliculas AS a
INNERJOIN inventarios AS b ON a.pelicula_id= b.pelicula_idINNERJOIN rentas AS c ON b.inventario_id= c.inventario_idINNERJOIN clientes AS d ON c.cliente_id= d.cliente_idINNERJOIN direcciones AS e ON d.direccion_id= e.direccion_idINNERJOIN ciudades AS f ON e.ciudad_id= f.ciudad_id)as tabla_renta_por_ciudad
GROUPBY ciudad, clasificacion
ORDER by cantidad_rentada DESC)ASTabla_finalWHERE ranking_ciudad =1;
Practique con algunos queries y esto pude sacar, algo que deberia mejorar guys?
---Minimo y maximo precio de renta por clasificacion
SELECT clasificacion,MIN(precio_renta)ASMin_precio_renta,MAX(precio_renta)ASMax_precio_rentaFROM peliculas
GROUPBY clasificacion;---Precio promedio de renta por clasificacion
SELECT clasificacion,ROUND(AVG(precio_renta),2)AS avg_renta
FROM peliculas
GROUPBY clasificacion
ORDERBY avg_renta DESC;--Duracion promedio de renta por clasficacion
SELECT clasificacion,ROUND(AVG(duracion_renta),2)AS temps_renta
FROM peliculas
GROUPBY clasificacion
ORDERBY temps_renta;---duracion pomedio(hour) por clasificacion
SELECT clasificacion,ROUND(AVG(duracion)/60,2)AS duracion_por_clasificacion_hour
FROM peliculas
GROUPBY clasificacion
ORDERBY duracion_por_clasificacion_hour;--Duracion promedio de pelicula(minutos) por clasificacion
SELECT clasificacion,ROUND(AVG(duracion),2)AS duracion_por_clasificacion
FROM peliculas
GROUPBY clasificacion
ORDERBY duracion_por_clasificacion;--Costo promedio de remplazo por titulo TOP53SELECT titulo,ROUND(AVG(costo_reemplazo),2)AS replacement_cost
FROM peliculas
GROUPBY titulo
ORDERBY replacement_cost DESCLIMIT53;---Costo promedio de reemplazo por clasificacion
SELECT clasificacion,ROUND(AVG(costo_reemplazo),2)AS replacement_cost
FROM peliculas
GROUPBY clasificacion
ORDERBY replacement_cost DESC;---Mayor duracion de renta por titulo
SELECT titulo,MAX(duracion_renta)ASMax_duracion_rentaFROM peliculas
GROUPBY titulo
ORDERBYMax_duracion_rentaDESC;--DuracionMax y Min de renta por clasificacion
SELECT clasificacion,MAX(duracion_renta)ASMax_duracion_renta,MIN(duracion_renta)ASMin_duracion_rentaFROM peliculas
GROUPBY clasificacion;---total de peliculas por clasificacion
SELECT clasificacion,COUNT(*)AS total_movies_per_clasificacion
FROM peliculas
GROUPBY clasificacion
ORDERBY total_movies_per_clasificacion DESC;
Mi Query: Clasificacion de Pelis favorita por Ciudad
SELECT ciudad, clasificacion
FROM(SELECT ciudad, clasificacion,count(renta_id)AS cantidad_rentada,rank()over(partition By ciudad order by count(*) desc)as ranking_ciudad
FROM(SELECT ci.ciudad, pe.titulo, pe.duracion, pe.clasificacion, r.renta_idFROMpublic.peliculasAS pe
INNERJOINpublic.inventariosAS i ON pe.pelicula_id= i.pelicula_idINNERJOINpublic.rentasAS r ON i.inventario_id= r.inventario_idINNERJOINpublic.clientesAS c ON r.cliente_id= c.cliente_idINNERJOINpublic.direccionesAS d ON c.direccion_id= d.direccion_idINNERJOINpublic.ciudadesAS ci ON d.ciudad_id= ci.ciudad_id)asTabla_renta_por_ciudadGROUPBY ciudad, clasificacion
ORDER by cantidad_rentada DESC)ASTabla_finalWHERE ranking_ciudad =1;