No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

13 Días
2 Hrs
43 Min
13 Seg

Agregación de datos

19/34
Recursos

Aportes 173

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hay que tener en cuenta que count(*) cuenta todas la filas y count(campo) no toma encuenta los campos con valores nulos al realizar la cuenta.

Mínimo y máximo agrupado por la clasificación de películas:

Use el comando round() que aprendí en el curso de python, para indicar al precio promedio que solo desplegara 2 decimales

SELECT clasificacion, ROUND(AVG(precio_renta),2) AS precio_promedio
FROM peliculas
GROUP BY clasificacion
ORDER BY precio_promedio DESC;

Si tienen otra forma, compártanla !! 😃

A mi juicio, en esta clase empieza el curso…

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
INNER JOIN direcciones AS d ON c.direccion_id = d.direccion_id
INNER JOIN ciudades AS ci ON d.ciudad_id = ci.ciudad_id
GROUP BY ciudad
ORDER BY 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
INNER JOIN inventarios AS i ON p.pelicula_id = i.pelicula_id
INNER JOIN rentas AS r ON i.inventario_id = r.inventario_id
INNER JOIN clientes AS c ON r.cliente_id = c.cliente_id
INNER JOIN direcciones AS d ON c.direccion_id = d.direccion_id
INNER JOIN ciudades AS ci ON d.ciudad_id = ci.ciudad_id
GROUP BY ciudad
ORDER BY 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.

¿Cuáles son los países que más películas rentan? Un recorrido visual de todas las tablas que se ven implicadas para obtener esta agregación.

mi hipotesis era poder ver cuales clientes eran los que mas habian rentado este es el Query y la imagen

SELECT CONCAT(c.nombre, ' ', c.apellido) AS nombre_completo, SUM(cantidad) AS pago_total
FROM clientes AS c
INNER JOIN pagos AS p
USING (cliente_id)
GROUP BY cliente_id
ORDER BY pago_total DESC
LIMIT 10;

Jugando con la tabla peliculas_actores saqué los 5 actores que actúan en más películas

SELECT actor_id, COUNT(pelicula_id) AS peliculas_totales
FROM peliculas_actores
GROUP BY actor_id
ORDER BY peliculas_totales DESC
LIMIT 5

Queries realizados

  1. Número de películas que están en inglés.
  2. TOP 5 de clientes que más gastaron en renta de películas
  3. TOP 5 clientes que más rentaron películas
  4. TOP 5 actores que han participado en más películas
  5. Clasificación de películas más vistas por ciudad.

Para ver el total de películas en cada idioma.

SELECT l.nombre, COUNT(p.titulo) AS "Numero_Peliculas"
FROM lenguajes AS l
FULL OUTER JOIN peliculas AS p
ON l.lenguaje_id = p.lenguaje_id
GROUP BY l.nombre

Hice este query para saber cuantas rentas distintas se hicieron por mes.

SELECT date_trunc('month', fecha_renta) as mes, count(distinct(renta_id)) AS numero_rentas
FROM rentas
GROUP BY mes
ORDER BY numero_rentas DESC;

Asi ordene las peliculas por el minimo

select titulo, min(precio_renta)
from peliculas
group by titulo
order by min(precio_renta);

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) AS Min_precio_renta, MAX(precio_renta) AS Max_precio_renta
FROM peliculas
GROUP BY clasificacion;

---Precio promedio de renta por clasificacion
SELECT clasificacion, ROUND (AVG (precio_renta),2) AS avg_renta
FROM peliculas
GROUP BY clasificacion
ORDER BY avg_renta DESC;


--Duracion promedio de renta por clasficacion
SELECT clasificacion, ROUND (AVG (duracion_renta),2) AS temps_renta
FROM peliculas
GROUP BY clasificacion
ORDER BY temps_renta;

---duracion pomedio (hour) por clasificacion
SELECT clasificacion, ROUND(AVG(duracion)/60,2)AS duracion_por_clasificacion_hour
FROM peliculas
GROUP BY clasificacion
ORDER BY duracion_por_clasificacion_hour;

--Duracion promedio de pelicula (minutos) por clasificacion
SELECT clasificacion, ROUND(AVG(duracion),2)AS duracion_por_clasificacion
FROM peliculas
GROUP BY clasificacion
ORDER BY duracion_por_clasificacion;

--Costo promedio de remplazo por titulo TOP 53
SELECT titulo, ROUND( AVG (costo_reemplazo),2) AS replacement_cost
FROM peliculas
GROUP BY titulo
ORDER BY replacement_cost DESC
LIMIT 53;


--- Costo promedio de reemplazo por clasificacion
SELECT clasificacion, ROUND (AVG(costo_reemplazo),2) AS replacement_cost
FROM peliculas
GROUP BY clasificacion
ORDER BY replacement_cost DESC;

--- Mayor duracion de renta por titulo
SELECT titulo,  MAX (duracion_renta) AS Max_duracion_renta
FROM peliculas
GROUP BY titulo
ORDER BY Max_duracion_renta DESC;

--Duracion Max y Min de renta por clasificacion
SELECT clasificacion, MAX (duracion_renta) AS Max_duracion_renta, MIN (duracion_renta) AS Min_duracion_renta
FROM peliculas
GROUP BY clasificacion;

---total de peliculas por clasificacion

SELECT clasificacion, COUNT(*) AS total_movies_per_clasificacion
FROM peliculas
GROUP BY clasificacion
ORDER BY total_movies_per_clasificacion DESC;

Curioso no sabia que se podían hacer graficas

En todos los casos el precio menor por clasificacion es de $0.98

SELECT clasificacion, MIN(precio_renta) AS precio_renta_menor
FROM peliculas
GROUP BY clasificacion
ORDER BY precio_renta_menor DESC

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;

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_id  FROM public.peliculas AS pe
INNER JOIN public.inventarios AS i  ON pe.pelicula_id = i.pelicula_id
INNER JOIN public.rentas AS r ON i.inventario_id = r.inventario_id
INNER JOIN public.clientes AS c ON r.cliente_id = c.cliente_id
INNER JOIN public.direcciones AS d ON c.direccion_id = d.direccion_id
INNER JOIN public.ciudades AS ci ON d.ciudad_id = ci.ciudad_id) as Tabla_renta_por_ciudad
GROUP BY ciudad, clasificacion
ORDER by cantidad_rentada DESC) AS Tabla_final
WHERE ranking_ciudad =  1;

NOTA: Si puedes simplificarlo me enseñas como?

Pensé que podría ser útil saber cuantos empleados hay por tienda, para saber así qué tienda tiene más empleados y qué además están activos. El query sería así:

SELECT tienda_id, activo, COUNT(*) AS conteo_empleados
FROM empleados
GROUP BY tienda_id, activo
ORDER BY conteo_empleados DESC;

Top 10 de más películas por nombre y apellido de los actors

SELECT actores.nombre, actores.apellido, peliculas_actores.actor_id,
COUNT(peliculas_actores.pelicula_id) AS peliculas_totales
FROM actores, peliculas_actores
WHERE actores.actor_id = peliculas_actores.actor_id 
GROUP BY actores.nombre,actores.apellido, peliculas_actores.actor_id
ORDER BY peliculas_totales DESC
LIMIT 10;

Para controles de inventarios y predicdciones de ventas asi como de compras para controles del stock vs ventas y proyeccion de las mismas

-- precio maximo y min  por peliculas 
SELECT titulo, MAX(precio_renta), MIN(precio_renta)
FROM peliculas
GROUP BY titulo;
Después de ver el precio promedio de cada clasificación de películas, con: ```js SELECT clasificacion, AVG(precio_renta) AS Precio_Promedio FROM peliculas GROUP BY clasificacion ORDER BY precio_promedio DESC; ``` Podemos ver también cuál es el total de ventas que tiene cada género de película, con: ```js SELECT clasificacion, SUM(precio_renta) AS Total_Venta FROM peliculas GROUP BY clasificacion ORDER BY Total_Venta DESC; ``` Así, nos podemos dar cuenta que aunque las películas de clasificación PG tienen un precio mayor, en promedio, las que mayor ventas generan son las de clasificación PG-13. Esto podría indicar que las películas de clasificación PG-13, son las que más se venden en cantidad, lo cuál podemos verificar con: ```js SELECT clasificacion, COUNT (clasificacion) AS cantidad_por_clasificacion fROM peliculas GROUP BY clasificacion ORDER BY cantidad_por_clasificacion DESC; ``` Afirmando nuestra hipótesis.
Como puedo agrgar datos binarios a sql sin usar bytea? en sqlserver hay formar de manejar datos binarios sin introducir a la base de datos, si no desde otro directorio.
```js SELECT TITULO, MIN(PRECIO_RENTA) FROM PELICULAS GROUP BY TITULO,PRECIO_RENTA ORDER BY PRECIO_RENTA ASC; ```
Ver las tiendas con mayor stock por titulo. ```js SELECT * FROM ( SELECT tienda_id, titulo, COUNT(*)::integer AS total FROM inventarios JOIN peliculas ON inventarios.pelicula_id = peliculas.pelicula_id GROUP BY tienda_id, titulo ORDER BY tienda_id ) AS pelis_mayor3 WHERE total > 2 ```
\-- Average of quantity per client SELECT cliente\_id, ROUND(AVG(cantidad), 2) as Average FROM pagos GROUP BY cliente\_id ORDER BY Average DESC \-- Most frequently appearing actors SELECT nombre, COUNT(\*) AS Actors FROM actores GROUP BY nombre ORDER BY Actors DESC
SELECT titulo, MIN(precio\_renta) FROM peliculas GROUP BY titulo, precio\_renta ORDER BY precio\_renta LIMIT 1;
Una función interesante aplicada a la estadística es la desviación estándar. ```js SELECT STDDEV(precio_renta) FROM peliculas; ```SELECT STDDEV(precio\_renta) FROM peliculas;
`Valor total de las rentas activas:` ```js SELECT CONCAT('$ ', SUM(peliculas.precio_renta)) AS total_rented_value FROM ( SELECT inventarios.pelicula_id AS p_id, * FROM inventarios LEFT JOIN rentas ON rentas.inventario_id = inventarios.inventario_id ) AS inventario_rentado INNER JOIN peliculas ON p_id = peliculas.pelicula_id WHERE renta_id IS NOT NULL; ``` ![](https://static.platzi.com/media/user_upload/image-844cf9ea-f036-4c9f-b506-208eebbe6474.jpg)
SELECT CONCAT(clientes.nombre, ' ', clientes.apellido) AS cliente, 
		SUM(cantidad) AS cantidad_pagada,
		COUNT(inventario_id) AS cantidad_peliculas_rentadas
FROM clientes
	INNER JOIN pagos ON clientes.cliente_id = pagos.cliente_id
	INNER JOIN rentas ON clientes.cliente_id = rentas.cliente_id
GROUP BY cliente
ORDER BY cantidad_pagada DESC, cantidad_peliculas_rentadas DESC;
-- Utilizando la funcion MAX y MIN en nuetro proyecto 
SELECT MAX (precio_renta)
FROM 		peliculas;
SELECT MIN (precio_renta)
FROM 		peliculas;

-- Sacando el maximo y minimo de renta con el titulo de la pelicula 
SELECT titulo, MAX (precio_renta)
FROM 		peliculas
GROUP BY titulo;
SELECT titulo, MIN (precio_renta)
FROM 		peliculas
GROUP BY titulo;

Reto Clase

SELECT
    t.tienda_id,
    t.jefe_tienda_id,
    t.direccion_id,
    COUNT(r.renta_id) AS total_rentas
FROM
    public.tiendas t
JOIN
    public.empleados e ON t.tienda_id = e.tienda_id
JOIN
    public.inventarios i ON t.tienda_id = i.tienda_id
JOIN
    public.rentas r ON i.inventario_id = r.inventario_id
GROUP BY
    t.tienda_id, t.jefe_tienda_id, t.direccion_id
ORDER BY
    total_rentas DESC;

Se realiza una unión (JOIN) entre las tablas tiendas, empleadosy rentaspara obtener la información necesaria. Luego, se utiliza la función de agregación COUNTpara contar el número total de alquileres por cada tienda. La consulta finalmente agrupa por la identificación de la tienda ( tienda_id), el jefe de tienda ( jefe_tienda_id) y la dirección ( direccion_id).

  • La cláusula ORDER BY total_rentas DESCordena el resultado en orden descendente según el número total de alquileres, de modo que las tiendas que más alquilan aparezcan primero en la lista.
-- Reto / traer informacion de una de la tablas que no sea peliculas

-- Total de clientes registrados
SELECT COUNT(*)
FROM clientes;

-- Total de clientes activos
SELECT COUNT(cliente_id)
FROM clientes
WHERE activo IS TRUE;

-- Cantidad de clientes por pais ordenados
SELECT pais, count(cliente_id) AS cantidad_de_clientes_por_pais
FROM clientes AS cli
INNER JOIN direcciones AS dir ON cli.direccion_id = dir.direccion_id
INNER JOIN ciudades AS ciu ON ciu.ciudad_id = dir.ciudad_id
INNER JOIN paises AS p ON p.pais_id = ciu.pais_id
GROUP BY p.pais_id
ORDER BY cantidad_de_clientes_por_pais DESC

-- Cantidad de clientes por ciudad en el pais con mas clientes
SELECT ciudad, count(cliente_id) AS cantidad_de_clientes_por_ciudad
FROM clientes AS cli
INNER JOIN direcciones AS dir ON cli.direccion_id = dir.direccion_id
INNER JOIN ciudades AS ciu ON ciu.ciudad_id = dir.ciudad_id
INNER JOIN paises AS p ON p.pais_id = ciu.pais_id
WHERE p.pais = 'India'
GROUP BY ciu.ciudad
ORDER BY ciu.ciudad DESC
Mínimo de la tabla: ![](https://static.platzi.com/media/user_upload/image-cdd536d6-81b8-4a2f-9c0f-13c5a4f3ab97.jpg) Mínimo por agrupación de clasificación: ![](https://static.platzi.com/media/user_upload/image-3c9dacae-ed46-4a79-b761-2e607a9dea59.jpg) Mínimo por agrupación de categoría. Para este hice JOIN de las tres tablas, peliculas, peliculas\_categorias y categorias. ![](https://static.platzi.com/media/user_upload/image-ac4bf8b2-711d-4545-9d4a-905a33c28d6b.jpg) Los join se pueden hacer de varias formas, esta es otra: ![](https://static.platzi.com/media/user_upload/image-a6cd1033-268a-4354-9250-f7768dd3b21e.jpg) Este fue el resultado ![](https://static.platzi.com/media/user_upload/image-ce5799c7-bde2-48c8-a768-214dcfe1e0c8.jpg) Como se puede observar, el mínimo de todas las categorías se encuentra entre los mismos valores 0.98 y 0.99 US.
Mi aporte: Query para saber que cliente ha pagado y rentado más:```js SELECT total_rentas.cliente_id,total_rentas.nombre_cliente,total_rentas.total_rentas,SUM(pagos.cantidad) as Total_dlls FROM (SELECT clientes.cliente_id, nombre || ' '||apellido AS nombre_cliente, COUNT(renta_id) AS total_rentas FROM rentas INNER JOIN clientes ON rentas.cliente_id = clientes.cliente_id GROUP BY clientes.cliente_id ORDER BY total_rentas DESC) AS total_rentas INNER JOIN pagos ON total_rentas.cliente_id = pagos.cliente_id GROUP BY total_rentas.cliente_id, total_rentas.nombre_cliente,total_rentas.total_rentas,pagos.cantidad ORDER BY Total_dlls DESC ; ```SELECT total\_rentas.cliente\_id,total\_rentas.nombre\_cliente,total\_rentas.total\_rentas,SUM(pagos.cantidad) as Total\_dlls FROM (SELECT clientes.cliente\_id, nombre || ' '||apellido AS nombre\_cliente, COUNT(renta\_id) AS total\_rentas FROM rentas INNER JOIN clientes ON rentas.cliente\_id = clientes.cliente\_id GROUP BY clientes.cliente\_id ORDER BY total\_rentas DESC) AS total\_rentas INNER JOIN pagos ON total\_rentas.cliente\_id = pagos.cliente\_id GROUP BY total\_rentas.cliente\_id, total\_rentas.nombre\_cliente,total\_rentas.total\_rentas,pagos.cantidad ORDER BY Total\_dlls DESC ;
![](https://static.platzi.com/media/user_upload/image-143c9182-20f9-46a4-9626-908bad4dc091.jpg)

Este query muestra el conteo de clasificacion ordenado de manera descendente:

SELECT clasificacion, COUNT(*) AS conteo
FROM peliculas
GROUP BY clasificacion
ORDER BY conteo DESC;
SELECT titulo, MIN(precio_renta)
FROM peliculas
GROUP BY titulo;
Cantidad de rentas que ha hecho cada cliente ![](https://static.platzi.com/media/user_upload/image-52db72d7-41fe-4d28-8866-dc62bd00568d.jpg) Top 10 de ciudades que rentan películas ![](https://static.platzi.com/media/user_upload/image-7f6d81ab-5407-45fa-bbf0-dfa88d71989a.jpg)

Promedio del costo de remplazar una película dependiendo de su categoría

select clasificacion, count (*), avg (costo_reemplazo) as costo_reemplazo_promedio
from peliculas 
group by clasificacion
order by costo_reemplazo_promedio;

Sí aplicamos este código conoceremos el precio promedio por cada clasificación

select clasificacion, count (*), avg (precio_renta)
from peliculas 
group by clasificacion

Lenguaje que mas aparace

SELECT nombre, SUM(lenguaje_id) AS mas_usado
FROM lenguajes
GROUP BY nombre 
ORDER BY mas_usado DESC;

--- ACTORES QUE MAS SE REPITEN

SELECT nombre, COUNT(*) AS repeticiones
FROM actores
GROUP BY nombre
ORDER BY repeticiones DESC
LIMIT 10;



Asi ordene las peliculas por precio _renta

<SELECT titulo, MIN(precio_renta)
FROM peliculas
GROUP BY titulo
ORDER BY titulo ASC;> 

MAX

Computes the maximum of the non-null input values. Available for any numeric, string, date/time, or enum type, as well as inet, interval, money, oid, pg_lsn, tid, xid8, and arrays of any of these types.

**Clientes irresponsables!!!! 🤣** Las siguientes personas duraron mas de 9 días para entregar las pelis ![](https://static.platzi.com/media/user_upload/image-af9bcc5b-1740-4740-a2bb-8e0d6e5ca4eb.jpg) Query: ```js SELECT cl.nombre , pl.titulo , r.fecha_retorno - r.fecha_renta AS duracion_prestamo FROM rentas AS r JOIN inventarios AS i ON r.inventario_id=i.inventario_id JOIN clientes AS cl ON cl.cliente_id=r.cliente_id JOIN peliculas AS pl ON i.pelicula_id=pl.pelicula_id WHERE fecha_retorno IS NOT NULL ORDER BY 3 DESC ``` Mientras que estas personas llevan desde 2005 sin entregar sus pelis!!! ```js SELECT cl.nombre , pl.titulo , CURRENT_TIMESTAMP - r.fecha_renta AS duracion_prestamo FROM rentas AS r JOIN inventarios AS i ON r.inventario_id=i.inventario_id JOIN clientes AS cl ON cl.cliente_id=r.cliente_id JOIN peliculas AS pl ON i.pelicula_id=pl.pelicula_id WHERE fecha_retorno IS NULL ORDER BY 3 DESC ```
**Clientes irresponsables!!!! 🤣** Las siguientes personas duraron mas de 9 días para entregar las pelis ![](https://static.platzi.com/media/user_upload/image-0443c20f-4e20-4f84-a555-f310e13cf5b3.jpg) Query: ```js SELECT cl.nombre , pl.titulo , r.fecha_retorno - r.fecha_renta AS duracion_prestamo FROM rentas AS r JOIN inventarios AS i ON r.inventario_id=i.inventario_id JOIN clientes AS cl ON cl.cliente_id=r.cliente_id JOIN peliculas AS pl ON i.pelicula_id=pl.pelicula_id WHERE fecha_retorno IS NOT NULL ORDER BY 3 DESC ```Mientras que estas personas llevan desde 2005 sin entregar sus pelis!!! ![](https://static.platzi.com/media/user_upload/image-c2af35af-33be-40ad-b473-ec7f1e804eb4.jpg) Query: ```js SELECT cl.nombre , pl.titulo , CURRENT_TIMESTAMP - r.fecha_renta AS duracion_prestamo FROM rentas AS r JOIN inventarios AS i ON r.inventario_id=i.inventario_id JOIN clientes AS cl ON cl.cliente_id=r.cliente_id JOIN peliculas AS pl ON i.pelicula_id=pl.pelicula_id WHERE fecha_retorno IS NULL ORDER BY 3 DESC ```
**Mejores empleados:** ![](https://static.platzi.com/media/user_upload/image-861cada2-33f8-4bb8-9682-ca05db4664e8.jpg) Query: ```txt SELECT e.nombre , SUM(pl.precio_renta) AS total_en_ventas FROM rentas AS r JOIN inventarios AS i ON r.inventario_id=i.inventario_id JOIN peliculas AS pl ON i.pelicula_id=pl.pelicula_id JOIN empleados AS e ON r.empleado_id=e.empleado_id GROUP BY 1 ORDER BY 2 DESC ```SELECT e.nombre , SUM(pl.precio\_renta) AS total\_en\_ventas FROM rentas AS r JOIN inventarios AS i ON r.inventario\_id=i.inventario\_id JOIN peliculas AS pl ON i.pelicula\_id=pl.pelicula\_id JOIN empleados AS e ON r.empleado\_id=e.empleado\_id GROUP BY 1 ORDER BY 2 DESC
## Peliculas más vendidas ![](https://static.platzi.com/media/user_upload/image-3948f3e7-9206-4b93-9b23-4fddc393045e.jpg) Query: ```txt SELECT pl.titulo , SUM(pl.precio_renta) AS total_en_ventas FROM rentas AS r JOIN inventarios AS i ON r.inventario_id=i.inventario_id JOIN peliculas AS pl ON i.pelicula_id=pl.pelicula_id GROUP BY 1 ORDER BY 2 DESC ```SELECT pl.titulo , SUM(pl.precio\_renta) AS total\_en\_ventas FROM rentas AS r JOIN inventarios AS i ON r.inventario\_id=i.inventario\_id JOIN peliculas AS pl ON i.pelicula\_id=pl.pelicula\_id GROUP BY 1 ORDER BY 2 DESC
El siguiente Query muestra la cantidad de pagos realizados por un cliente, se utilizo un Join con la tabla clientes, para traer el nombre del cliente, y el resultado se muestra ordenado de manera descendiente de acuerdo a la cantidad de pagos. ```txt SELECT C.nombre,p.cliente_id, SUM(p.cantidad) AS cantidad_pagos FROM pagos AS p INNER JOIN clientes AS c ON p.cliente_id = c.cliente_id GROUP BY c.nombre, p.cliente_id ORDER BY cantidad_pagos DESC; ```

Minimo
SELECT titulo, MIN(precio_renta)
FROM peliculas
GROUP BY titulo;

Use todo lo que enseño el profesor en la clase en este codigo

SELECT clasificacion, MAX(duracion), MIN(duracion), AVG(precio_renta)
	FROM public.peliculas
	GROUP BY clasificacion
	ORDER BY avg desc;

👉Recordatorio:

Una pregunta basica de entrevistas es cuales son las funciones de agregacion y como se aplican. Tomen nota de esta clase, porque es util que sepan que estas son SUM, AVG, MAX, MIN, entre otras

Como ordenar el minimo

SELECT titulo, MIN(precio_renta)
FROM peliculas
GROUP BY titulo
ORDER BY MIN ASC;

Los 10 clientes que mas han pagado en rentas.

SELECT CONCAT(c.nombre,' ', c.apellido) AS "Soy el cliente", CONCAT ('$', SUM(p.cantidad), ' dolares') AS "he pagado"
FROM pagos AS p
INNER JOIN clientes AS c
ON p.cliente_id = c.cliente_id
GROUP BY c.nombre, c.apellido
ORDER BY "he pagado" DESC
LIMIT 10;

Desde el punto de vista del negocio serian interesantes:

Consulta de ingresos generados por las rentas de películas.

Consulta de películas más populares por género

Consulta de películas más rentadas por período de tiempo.

19. Agregación de datos

SELECT titulo, MAX(precio_renta)
FROM peliculas
GROUP BY titulo;

SELECT titulo, MIN(precio_renta)
FROM peliculas
GROUP BY titulo;

SELECT MIN(precio_renta)
FROM peliculas
;

SELECT SUM(precio_renta)
FROM peliculas;

SELECT clasificacion, COUNT(*)
FROM peliculas
GROUP BY clasificacion;

SELECT AVG(precio_renta)
FROM peliculas;

SELECT clasificacion, AVG(precio_renta) AS precio_promedio
FROM peliculas
GROUP BY clasificacion
ORDER BY precio_promedio DESC;

SELECT clasificacion, AVG(duracion) AS duracion_promedio
FROM peliculas
GROUP BY clasificacion
ORDER BY duracion_promedio DESC;

SELECT clasificacion, AVG(duracion_renta) AS duracion_renta_promedio
FROM peliculas
GROUP BY clasificacion
ORDER BY duracion_renta_promedio DESC;

tablas clientes y pagos, podemos encontrar el numero de veces que los clientes han rentado y a que precio

SELECT
c.cliente_id, CONCAT (c.nombre, ’ ', c.apellido) as cliente,
p.cantidad,
p.fecha_pago
from clientes as c
left join pagos as p
on c.cliente_id = p.cliente_id

Comparto codigo para encontrar los 5 clientes que mas han rentado peliculas con la respectiva tienda a la que estan vinculados.

SELECT nombre, apellido, tienda_id, SUM(cantidad) AS cantidad_pago_total
FROM clientes c, pagos p
WHERE c.cliente_id = p.cliente_id
GROUP BY nombre, apellido, tienda_id
ORDER BY cantidad_pago_total DESC
LIMIT 5;

Realicé el MAX para duración y así luego compararlo con la duración en la renta y ver si tenia que ver con la demora al devolver la pelicula, pero observando los resultados no tienen nada que ver estos tiempos.

SELECT clasificacion, MAX(duracion) AS mas_larga,  duracion_renta
FROM peliculas 

GROUP BY clasificacion, duracion_renta
ORDER BY duracion_renta DESC; 

SELECT SUM (lenguaje_id) FROM peliculas;

Comparto algunos quieres para responder algunas preguntas de un comentario más abajo 😃

/* número de películas que están en inglés */
SELECT l.nombre, COUNT(1) as conteo
FROM peliculas p,
	 lenguajes l
WHERE p.lenguaje_id = l.lenguaje_id
GROUP BY l.nombre;

/* Top 5 clientes que más rentaron peliculas */
SELECT c.cliente_id, c.nombre, c.apellido, SUM(p.cantidad) AS gasto_en_renta
FROM clientes c,
	 rentas r,
	 pagos p
WHERE r.cliente_id = c.cliente_id
  AND p.cliente_id = r.cliente_id
  AND p.renta_id = r.renta_id
GROUP BY c.cliente_id, c.nombre, c.apellido
ORDER BY gasto_en_renta DESC
LIMIT 5;
/

/* Top 5 actores que han participado en más peliculas */
SELECT a.nombre||' '||a.apellido as nombre_actor, COUNT(1) as conteo
FROM peliculas_actores p,
	 actores a
WHERE p.actor_id = a.actor_id
GROUP BY a.nombre||' '||a.apellido
ORDER BY conteo DESC
LIMIT 5;
/

Solucion al problema

SELECT MIN(precio_renta)
FROM peliculas;

SELECT titulo,MIN(precio_renta)
FROM peliculas
GROUP BY titulo;

Aqui les dejo algunas d elas queries intetresantes que logre sacar!

--Películas por tienda

SELECT tienda_id, COUNT(DISTINCT pelicula_id)
FROM inventarios
GROUP BY tienda_id
ORDER BY tienda_id ASC;
--Ventas por empleado

SELECT empleado_id, SUM (cantidad) AS ventas_por_empleado
FROM pagos
GROUP BY empleado_id
ORDER BY ventas_por_empleado DESC;


--Total Compras por cliente

SELECT cliente_id, SUM (cantidad) AS compras_por_cliente
FROM pagos
GROUP BY cliente_id
ORDER BY compras_por_cliente DESC;

--Rentas por cliente
SELECT cliente_id, COUNT(DISTINCT inventario_id) AS total_rentas
FROM rentas
GROUP BY cliente_id
ORDER BY total_rentas DESC;

seguramente habran muchas mas pero esas fueron als que se me ocurrienrona primera vista 😄 seria genial ver cuales crearon tambein ustedes

Me pregunté cual era la pelicula que más se rentó y si habian peliculas que nunca se habian rentado. Alguien más se lo preguntó o que me puedar feedback de los queries

-- Cual es la pelicula más rentada? Listado de peliculas rentadas
SELECT peliculas.pelicula_id, titulo, COUNT(rentas.inventario_id) AS conteo
FROM  rentas JOIN inventarios 
	ON rentas.inventario_id = inventarios.inventario_id
	JOIN peliculas 
	ON peliculas.pelicula_id = inventarios.pelicula_id
GROUP BY titulo,peliculas.pelicula_id
ORDER BY conteo DESC;
-- Existen peliculas que no se han rentado nunca?

SELECT inventarios.pelicula_id, titulo, peliculas.pelicula_id
FROM inventarios RIGHT JOIN peliculas 
	ON inventarios.pelicula_id = peliculas.pelicula_id
WHERE inventarios.pelicula_id IS NULL
GROUP BY titulo, inventarios.pelicula_id, peliculas.pelicula_id
;
SELECT MIN (precio_renta)
FROM peliculas
GROUP BY titulo;

SELECT MIN (precio_renta)
FROM peliculas;

Mi aporte es un query con las peliculas mas rentadas y ordenada por mayores ingresos

-- PELICULAS MAS RENTADAS Y SUS VENTAS
SELECT *, round(rentas_acumuladas,0) * precio as ventas
FROM (
	SELECT peliculas.pelicula_id, peliculas.titulo, string_agg(DISTINCT CONCAT(actores.nombre, ' ', actores.apellido), ',') as nombes_actores , count(*) AS rentas_acumuladas, round(AVG(peliculas.precio_renta),2) as precio
	FROM rentas
	-- RELACIONA RENTAS CON INVENTARIOS
	JOIN inventarios ON rentas.inventario_id = inventarios.inventario_id
	-- RELACION PELICULAS CON NO. INVENTARIO (RENTAS NO TIENE EL ID PELICULA)
	JOIN peliculas on inventarios.pelicula_id = peliculas.pelicula_id
	-- RELACIONA PELICULAS CON ACTORES_PELICULAS
	JOIN peliculas_actores ON peliculas.pelicula_id = peliculas_actores.pelicula_id
	-- RELACIONA ACTORES_PELICULAS CON ACTORES
	JOIN actores ON actores.actor_id = peliculas_actores.actor_id
	GROUP BY peliculas.pelicula_id
) AS resultado
ORDER BY ventas DESC;
SELECT titulo, MIN(precio_renta)
FROM peliculas
GROUP BY titulo;

Hice este query para determinar cuáles son los 10 clientes que más han gastado en rentas.

SELECT SUM(cantidad) AS total_comprado_por_cliente, 
	clientes.cliente_id, 
	clientes.nombre, 
	clientes.apellido
FROM pagos LEFT JOIN clientes
ON clientes.cliente_id = pagos.cliente_id
GROUP BY clientes.cliente_id
ORDER BY total_comprado_por_cliente DESC
LIMIT 10;

Mi aporte a la comunidad, aquí un panorama por apariciones de actores desglosado por clasificación parental.

-- Consulta Actores por número de películas actuadas, desglosados por clasificación parental.
SELECT (nombre || ' ' || apellido) AS nombres, clasificacion AS clfc, COUNT(tab_pa.pelicula_id) AS actuadas
FROM actores AS tab_act
JOIN peliculas_actores AS tab_pa ON tab_act.actor_id = tab_pa.actor_id
JOIN peliculas AS tab_pel ON tab_pa.pelicula_id = tab_pel.pelicula_id
GROUP BY nombres, clasificacion
ORDER BY nombres, actuadas
LIMIT 50; -- Se puede quitar el comando sí se quiere ver la totalidad de los actores.

SELECT cliente_id, SUM(cantidad) AS suma_cantidad
FROM pagos
GROUP BY cliente_id
ORDER BY suma_cantidad DESC;

Selecciona a los clientes por la suma de cantidad de pagos realizados.
Ordenándolos de mayor a menor importes

Los clientes que más han gastado

SELECT cliente_id, SUM(cantidad) AS total_gastado
FROM pagos
GROUP BY cliente_id
ORDER BY total_gastado DESC
LIMIT 5

La cantidad de peliculas que hizo cada actor,un punto a recalcar, es que tenemos que unir nombre y apellido,ya que, hay actores que tienen igual nombre, por lo tanto ,al momento de hacer el conteo, va haber un error, porque se puede pensar que ese actor hizo 100 peliculas y en realidad es la suma del numero de peliculas de actores diferente, pero que tienen mismo nombre.

Select concat (A.nombre,' ',A.apellido) as "Nombre_completo", count(B.actor_id) as "Cantidad de peliculas" 
from actores A inner join
peliculas_actores B on A.actor_id=B.actor_id
group by "Nombre_completo"
order by "Cantidad de peliculas" DESC;

top 10 de clientes que mas han rentado películas

select id, nombre, apellido, n_rentas
from(
select cliente_id as id, count(*) as n_rentas
from rentas
group by cliente_id) as n_renta
left join clientes on n_renta.id=clientes.cliente_id
order by n_rentas desc
limit 10;

quería saber cual tienda era responsable de mas ventas, y descubrí que es la tienda numero 2 con este script

WITH pagos_tienda as (
	SELECT *
	FROM empleados
	INNER JOIN pagos USING (empleado_id)
	INNER JOIN tiendas USING (tienda_id)
)

SELECT SUM(cantidad) as total_sells,tienda_id --paste empleados, tiendas y pagos
FROM pagos_tienda
GROUP BY tienda_id
ORDER BY total_sells DESC

Ejemplo de query con funciones de agregación

Quise buscar cuales eran las tiendas con mas ventas

select tiendas.tienda_id, count(*) as numero_de_ventas
from rentas
inner join empleados on rentas.empleado_id = empleados.empleado_id
inner join tiendas on empleados.tienda_id = tiendas.tienda_id
group by tiendas.tienda_id
order by numero_de_ventas desc;

Al percatarme de que eran muy pocas tiendas fui a revisar otras tablas y descubrí que solo dos tiendas tienen empleados

select empleados.empleado_id , tiendas.tienda_id
from empleados full outer join tiendas
on empleados.tienda_id= tiendas.tienda_id;

Ahora quise buscar las ciudades con más tiendas

select ciudades.ciudad, count(*)
from tiendas
inner join direcciones on tiendas.direccion_id= direcciones.direccion_id
inner join ciudades on direcciones.ciudad_id= ciudades.ciudad_id
group by ciudad
;

y encontré que había una por ciudad

Así que para unir mis consultas fui a ver en que ciudades estaban mis tiendas que si tienen empleados

select ciudades.ciudad, tiendas.tienda_id
from tiendas
inner join direcciones on tiendas.direccion_id= direcciones.direccion_id
inner join ciudades on direcciones.ciudad_id= ciudades.ciudad_id
order by tiendas.tienda_id
;

aqui mi aporte para saber que pais tiene mas rentas de peliculas de forma descendente

SELECT COUNT(*), pa.pais
FROM rentas r INNER JOIN clientes c
ON r.cliente_id = c.cliente_id 
INNER JOIN direcciones d ON c.direccion_id = d.direccion_id 
INNER JOIN ciudades ci ON d.ciudad_id = ci.ciudad_id
INNER JOIN paises pa ON ci.pais_id = pa.pais_id
GROUP BY pa.pais
ORDER BY COUNT DESC

La o las mas caras con todos sus datos:

SELECT * 
FROM peliculas
WHERE precio_renta >  (SELECT MAX(precio_renta) FROM peliculas);

El precio máximo y mínimo de venta

SELECT titulo,
    MAX(precio_renta) AS precio_mayor,
    MIN(precio_renta) AS precio_menor
FROM peliculas
GROUP BY titulo;

Top 10 de clientes que mas rentan:

SELECT CONCAT(nombre, ' ', apellido) AS nombre, clientes_que_mas_rentan.conteo
FROM ( SELECT cliente_id, COUNT(cliente_id) AS conteo
       FROM rentas 
       GROUP BY cliente_id
       ORDER BY conteo DESC
       LIMIT 10 ) AS clientes_que_mas_rentan
INNER JOIN clientes ON 
        clientes_que_mas_rentan.cliente_id = clientes.cliente_id
ORDER BY clientes_que_mas_rentan.conteo DESC

UNA CONSULTA PARA DETERMINAR EL NUMERO PELICULAS EN INGLÉS.

SELECT COUNT(*)

FROM (

SELECT p.titulo as titulo,
	   l.nombre as lenguaje
FROM peliculas as p
INNER JOIN lenguajes as l
	ON p.lenguaje_id = l.lenguaje_id
WHERE l.nombre = 'English') AS tabla_nueva
;
```sql
-- CLIENTES CON MAS RENTAS
SELECT concat(a.nombre, ' ', a.apellido) nombre_completo, count(*) as counterin
FROM pagos as p
JOIN clientes  as a on p.cliente_id = a.cliente_id
GROUP by nombre_completo
ORDER by counterin desc
limit 5;

-- TOP CLIENTS WHO PAY MORE FOR RENT
SELECT concat(a.nombre, ' ', a.apellido) nombre_completo, sum(cantidad) as suma
FROM pagos as p
JOIN clientes  as a on p.cliente_id = a.cliente_id
GROUP by nombre_completo
order by suma desc
limit 5;

-- TOP EARNING MONTHS
SELECT count(extract(month from fecha_pago)), extract(month from fecha_pago) as mes
FROM pagos as p
JOIN clientes  as a on p.cliente_id = a.cliente_id
group by mes;

SELECT to_char(fecha_pago, 'Month') as ax, count(*)
FROM pagos
GROUP by ax
ORDER by count desc;

-- TOP employees with most rents
SELECT concat(e.nombre, ' ', e.apellido) as empl, count(*)
FROM pagos as p
JOIN clientes  as a on p.cliente_id = a.cliente_id
JOIN empleados as e on p.empleado_id = e.empleado_id
group by empl;

SELECT * FROM pagos;

-- TOP PLACES WITH MOST RENTS
SELECT t.tienda_id, count(*), t.jefe_tienda_id
FROM rentas as r
join inventarios as i on r.inventario_id = i.inventario_id
join tiendas as t on t.tienda_id = i.tienda_id
join empleados as e on e.empleado_id = t.jefe_tienda_id
GROUP by t.tienda_id, t.jefe_tienda_id
order by count desc
limit 5;

-- TOP BOSSES WITH MOST RENTS
SELECT t.tienda_id, count(*), concat(e.nombre, ' ',e.apellido) as nombre_jefe
FROM rentas as r
join inventarios as i on r.inventario_id = i.inventario_id
join tiendas as t on t.tienda_id = i.tienda_id
join empleados as e on e.empleado_id = t.jefe_tienda_id
GROUP by t.tienda_id, nombre_jefe
order by count desc
-- limit 5;

-- NOMBRE DE LOS JEFES DE TIENDAS QUE NO TIENEN EMPLEADOS
select nombre, apellido
from empleados
where empleado_id in (SELECT jefe_tienda_id
FROM empleados as e
RIGHT join tiendas as t on e.tienda_id = t.tienda_id
-- AND t.jefe_tienda_id = e.empleado_id
-- join tiendas as t on t.jefe_tienda_id = e.empleado_id
WHERE e.tienda_id is null);

-- TOP MOVIE CATEGORIES
SELECT c.nombre as catego, count(*)
FROM categorias as c
join peliculas_categorias as pc on pc.categoria_id = c.categoria_id
join peliculas as p on p.pelicula_id = pc.pelicula_id
join inventarios  as i on i.pelicula_id = p.pelicula_id
join rentas as r on r.inventario_id = i.inventario_id
GROUP by catego
order by count desc

-- TOP MOVIES
SELECT P.TITULO as movie, count(*)
FROM categorias as c
join peliculas_categorias as pc on pc.categoria_id = c.categoria_id
join peliculas as p on p.pelicula_id = pc.pelicula_id
join inventarios  as i on i.pelicula_id = p.pelicula_id
join rentas as r on r.inventario_id = i.inventario_id
GROUP by movie
order by count desc

-- TOP 10 MOVIES W/ CATEGORIES
SELECT P.TITULO as titulo, c.nombre as catego, count(*) as conteo
FROM categorias as c
join peliculas_categorias as pc on pc.categoria_id = c.categoria_id
join peliculas as p on p.pelicula_id = pc.pelicula_id
join inventarios  as i on i.pelicula_id = p.pelicula_id
join rentas as r on r.inventario_id = i.inventario_id
GROUP by titulo, catego
order by conteo desc
limit 10;

-- TOP 10 MOVIES WITH THE HIGHEST EARNINGS
SELECT P.TITULO as movie, c.nombre, sum(pa.cantidad) as cantidad
FROM categorias as c
join peliculas_categorias as pc on pc.categoria_id = c.categoria_id
join peliculas as p on p.pelicula_id = pc.pelicula_id
join inventarios  as i on i.pelicula_id = p.pelicula_id
join rentas as r on r.inventario_id = i.inventario_id
JOIN pagos as pa on pa.renta_id = r.renta_id
GROUP by movie, c.nombre
order by cantidad desc
LIMIT 10

-- TOP 10 CATEGORIES WITH THE HIGHEST EARNINGS
SELECT c.nombre categoria, sum(pa.cantidad) as cantidad
FROM categorias as c
join peliculas_categorias as pc on pc.categoria_id = c.categoria_id
join peliculas as p on p.pelicula_id = pc.pelicula_id
join inventarios  as i on i.pelicula_id = p.pelicula_id
join rentas as r on r.inventario_id = i.inventario_id
JOIN pagos as pa on pa.renta_id = r.renta_id
GROUP by categoria
order by cantidad desc
LIMIT 10

-- EMPLOYEES WITH THE HIGHEST EARNINGS
SELECT concat(e.nombre, ' ' ,e.apellido) as nombre_completo, sum(pa.cantidad) as cantidad
FROM categorias as c
join peliculas_categorias as pc on pc.categoria_id = c.categoria_id
join peliculas as p on p.pelicula_id = pc.pelicula_id
join inventarios  as i on i.pelicula_id = p.pelicula_id
join rentas as r on r.inventario_id = i.inventario_id
JOIN pagos as pa on pa.renta_id = r.renta_id
JOIN empleados as e on e.empleado_id = pa.empleado_id
GROUP by nombre_completo
order by cantidad desc

-- TOP STORES WITH THE HIGHEST EARNING
SELECT t.tienda_id as store, sum(pa.cantidad) as cantidad
FROM categorias as c
join peliculas_categorias as pc on pc.categoria_id = c.categoria_id
join peliculas as p on p.pelicula_id = pc.pelicula_id
join inventarios  as i on i.pelicula_id = p.pelicula_id
join rentas as r on r.inventario_id = i.inventario_id
JOIN pagos as pa on pa.renta_id = r.renta_id
JOIN empleados as e on e.empleado_id = pa.empleado_id
JOIN tiendas as t on t.tienda_id = i.tienda_id
GROUP by store
order by cantidad desc

Para ese caso solo cambiamos la funcion MAX por MIN y corremos el Query

Promedio de empleados activos en tiendas

SELECT activo, AVG(tienda_id) AS activos_tienda_promedio
FROM empleados 
GROUP BY activo 
ORDER BY activos_tienda_promedio DESC; 

Mi query de minimo

SELECT MIN(precio_renta)
FROM peliculas;

SELECT titulo, MIN(precio_renta)
FROM peliculas
GROUP BY titulo;

 

Para obtener el top 10 de peliculas mas baratas para alquilar

SELECT titulo, MIN(precio_renta) AS minimo FROM peliculas
GROUP BY titulo
ORDER BY minimo ASC
LIMIT 10;

Precio MIN de renta de Peliculas.

SELECT clasificacion, MIN(precio_renta)
   FROM peliculas
  GROUP BY 1;
-- Pago máximo
SELECT MAX(cantidad)
FROM pagos;

-- Pago minimo
SELECT MIN(cantidad)
FROM pagos;

-- Pago máximo por cliente
SELECT cliente_id, MAX(cantidad) AS pago_maximo_cliente
FROM pagos
GROUP BY cliente_id;

-- Pago minimo por cliente
SELECT cliente_id, MIN(cantidad) AS pago_minimo_cliente
FROM pagos
GROUP BY cliente_id;

-- Promedio de pagos
SELECT AVG(cantidad) AS promedio_pagos
FROM pagos;

-- Promedio de pagos por cliente
SELECT cliente_id,AVG(cantidad) AS promedio_pagos
FROM pagos
GROUP BY cliente_id
ORDER BY promedio_pagos DESC;

Existen 3 nombres de actores que se repiten 4 veces cada uno.

select nombre, count( *)as cantidad
from actores
group by nombre
order by cantidad DESC ;
--Mínimo precio de renta de la lista de películas.
SELECT MIN(precio_renta)
FROM peliculas;