No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Agregaci贸n de datos

19/34
Recursos

Aportes 122

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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:

Empezando con la hip贸tesis de que en 鈥榣a 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.

A mi juicio, en esta clase empieza el curso鈥

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 !! 馃槂

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

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

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;

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;

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.

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;

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

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;

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;

TOP de categor铆as de las pel铆culas

SELECT nombre, COUNT(*) AS total_ejemplares
FROM (
	SELECT p.titulo, c.nombre
	FROM peliculas AS p
	INNER JOIN peliculas_categorias AS pc ON p.pelicula_id = pc.pelicula_id
	INNER JOIN categorias AS c ON pc.categoria_id = c.categoria_id
	) AS pelicula_categoria
GROUP BY nombre
ORDER BY total_ejemplares DESC
;

Pel铆culas y el numero de actores por pel铆cula

SELECT titulo, COUNT(*) AS numero_de_actores
FROM (
	SELECT p.titulo, CONCAT(a.nombre, ' ', a.apellido) AS actor_actriz
	FROM peliculas AS p
	INNER JOIN peliculas_actores AS pa ON p.pelicula_id = pa.pelicula_id
	INNER JOIN actores AS a ON pa.actor_id = a.actor_id
	ORDER BY p.pelicula_id
	) AS titulo_actor
group by titulo
;
--minimo de la tabla con titulo
SELECT titulo, precio_renta
FROM peliculas
ORDER BY precio_renta
LIMIT 1;

Hola, estas fueron las consultas adicionales que realic茅:

SELECT * FROM rentas
INNER JOIN clientes
ON rentas.cliente_id = clientes.cliente_id
ORDER BY nombre;

SELECT nombre, COUNT(renta_id) AS Pe FROM rentas
INNER JOIN clientes
ON rentas.cliente_id = clientes.cliente_id
GROUP BY nombre
ORDER BY Pe DESC ,nombre ASC;

SELECT MAX(fecha_renta) FROM rentas;
SELECT MIN(fecha_renta) FROM rentas;

El minimo se extraer铆a de la siguiente manera:

SELECT MIN(precio_renta) FROM peliculas;

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

Dejo el ejercio de min por clasificaci贸n:

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

Total de utilidad bruta de la tienda

Cual fue el cliente que m谩s pedidos realiz贸:

Sumatoria total por cada cliente:

Fact: el primer puesto en ambas tablas fue de el mismo cliente. Posteriormente es curioso ver como cambia cada cliente de posici贸n en ambas tablas.

Precio m谩ximo vs m铆nimo, agrupados por duraci贸n.

Ejercicio 2
N煤mero total de pel铆culas rentadas por cada cliente

SELECT c.nombre, COUNT(r.renta_id) AS total_rentas FROM clientes AS c
	LEFT JOIN rentas AS r ON c.cliente_id = r.cliente_id
GROUP BY c.nombre
ORDER BY total_rentas;

Ejercicio 1:

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

Considero que la tabla de pagos tambi茅n se le puede extraer informaci贸n interesante. Por ejemplo, en el siguiente query descubr铆 qui茅n es el cliente m谩s billetudo jajaja:

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

uso del comando MIN

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

Hice un comparativo para saber el Top de 10 de ciudades que m谩s rentan vs el Top 10 de ciudades que m谩s facturan.
Encontr茅 que las que m谩s rentan no necesariamente son las que m谩s facturan. Creo que valdr铆a la pena revisar qu茅 podemos hacer en esas ciudades donde se rentan muchas pel铆culas para impulsar algunos t铆tulos que puedan ayudar a elevar mi facutaci贸n por ejemplo.
Top 10 ciudades que m谩s rentan:

SELECT ci.ciudad, COUNT(fecha_renta) AS cantidad_de_rentas
FROM rentas AS r
	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 ci.ciudad
ORDER BY cantidad_de_rentas DESC
LIMIT 10; 

Top 10 ciudades que m谩s facturan:

SELECT ci.ciudad, SUM(cantidad) AS total_rentas
FROM pagos AS p
	INNER JOIN clientes AS c ON p.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 ci.ciudad
ORDER BY total_rentas DESC
LIMIT 10;

Porfa si alguien sabe una manera m谩s sencilla de hacerlo, le agradecer茅 infinitamente su ayuda 馃槃

dos consultas

Cantidad de peliculas por actor

SELECT c.nombre, c.apellido, COUNT(a.actor_id) AS numero_peliculas
FROM peliculas_actores AS A LEFT JOIN actores AS C ON a.actor_id = c.actor_id
GROUP BY c.nombre, c.apellido
ORDER BY numero_peliculas DESC;

Cantidad de actores por pelicula

SELECT A.pelicula_id, A.titulo, COUNT(*)
FROM peliculas AS A LEFT JOIN peliculas_actores AS C ON A.pelicula_id = C.pelicula_id
GROUP BY a.pelicula_id, a.titulo
ORDER BY A.pelicula_id;

En la tabla inventarios es interesante conocer la cantidad de peliculas en stock

---Inventarios por peliculas
SELECT titulo, COUNT(*) en_inventario  
FROM inventarios
LEFT JOIN peliculas ON peliculas.pelicula_id = inventarios.pelicula_id
GROUP BY titulo
ORDER BY en_inventario DESC;

Quise saber cu谩l es la tienda que tiene m谩s pel贸iculas:

SELECT tienda_id, count(pelicula_id) As numero_de_peliculas
FROM inventarios
GROUP BY tienda_id
ORDER BY numero_de_peliculas DESC;

es muy genial practicar con esa bd , gracias por compartirlo

Quer铆a observar cual es el tipo de categor铆a que mejor promedio de renta tiene, y encontr茅 que en primer lugar est谩n: juegos y viajes

SELECT categorias.nombre,AVG(peliculas.precio_renta) AS precio_promedio FROM peliculas
INNER JOIN peliculas_categorias ON peliculas.pelicula_id = peliculas_categorias.pelicula_id
INNER JOIN categorias ON categorias.categoria_id = peliculas_categorias.categoria_id
GROUP BY categorias.nombre
ORDER BY precio_promedio DESC;

Pero si se realiza una suma en primer lugar est谩n los deportes

SELECT categorias.nombre,SUM(peliculas.precio_renta) AS precio_promedio FROM peliculas
INNER JOIN peliculas_categorias ON peliculas.pelicula_id = peliculas_categorias.pelicula_id
INNER JOIN categorias ON categorias.categoria_id = peliculas_categorias.categoria_id
GROUP BY categorias.nombre
ORDER BY precio_promedio DESC;

Estas fueron mis consultas adicionales :

SELECT empleado_id, SUM(cantidad) AS ventas, AVG(cantidad) as promedio
FROM public.pagos
GROUP BY empleado_id
ORDER BY ventas 
;

SELECT nombre, apellido 
FROM clientes
WHERE activo = True;

SELECT activo, COUNT(activo)
FROM clientes
GROUP BY activo;

SELECT anio_publicacion, COUNT(titulo), AVG(precio_renta), AVG(duracion)
FROM peliculas
GROUP BY anio_publicacion;

Saludos!!

Promedio de campos con group by

Estuve chusmeando datos de la tabla Pagos. Saqu茅 el pago m谩ximo mensual por cliente.

select extract(year from fecha_pago) as anio_pago,
extract(month from fecha_pago) as mes_pago,max(cantidad) as maximo_pago , cliente_id
from pagos
group by anio_pago, mes_pago, cliente_id
order by maximo_pago desc

SELECT MIN(precio_renta)
FROM peliculas;

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

Para seleccionar los actores con sus respectivas pel铆culas:

select concat(ac.nombre, ' ',ac.apellido) as actor, pe.titulo
from peliculas_actores pa
inner join actores ac using(actor_id)
inner join peliculas pe using(pelicula_id);

Total ventas y rentas por cliente:

SELECT 	CONCAT(c.nombre, ' ', c.apellido) AS cliente,
SUM(cantidad) AS total_ventas_por_cliente,
COUNT(cantidad) AS total_rentas_por_cliente
FROM clientes AS c
INNER JOIN pagos AS p 
ON c.cliente_id = p.cliente_id
GROUP BY cliente
ORDER BY total_ventas_por_cliente DESC;

Ventas por pa铆s:

SELECT 	pais, SUM(cantidad) AS ventas_por_pais
FROM pagos as p
INNER JOIN clientes as c
ON p.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		
INNER JOIN paises as pa
ON ci.pais_id = pa.pais_id
GROUP BY pais
ORDER BY ventas_por_pais DESC; 

Cu谩nto tiempo en promedio est谩n rentadas las pel铆culas, ordenadas de la que m谩s demoran en devolver a la que demoran menos.

SELECT p.titulo, AVG(r.fecha_retorno - r.fecha_renta) AS avg_days_rented
FROM peliculas p
JOIN inventarios i ON p.pelicula_id=i.pelicula_id
JOIN rentas r ON i.inventario_id=r.inventario_id
WHERE r.fecha_retorno IS NOT null
GROUP BY p.titulo
ORDER BY avg_days_rented DESC;

Tuve que usar ese WHERE porque algunas pel铆culas no han sido devueltas y la resta entre las fechas me daba null

Funci贸n MIN()

Con un ORDER BY del precio m铆nimo:

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

El promedio de costo de remplazo es interesante:

SELECT clasificacion, AVG(costo_reemplazo) AS promedio_cost_remplazo
FROM 	peliculas
GROUP BY clasificacion
ORDER BY promedio_cost_remplazo DESC;

SELECT titulo, min(precio_renta) AS minimo
FROM peliculas
GROUP BY titulo
ORDER BY minimo ;

Actores ordenados con mayor aparici贸n el pel铆culas:

SELECT actores.actor_id, (actores.nombre, actores.apellido) AS nombre, COUNT(*) AS numero_peliculas
FROM actores
INNER JOIN peliculas_actores ON actores.actor_id=peliculas_actores.actor_id
GROUP BY actores.actor_id
ORDER BY numero_peliculas DESC;

En mi caso quise revisar qu茅 lenguaje es el que predomina entre las pel铆culas, resulta que todo est谩 en Ingles 馃槂

SELECT l.nombre, COUNT(p.*)
FROM peliculas AS p
	LEFT JOIN lenguajes AS l
	ON p.lenguaje_id = l.lenguaje_id
GROUP BY l.nombre;
-- Empleados con mayor rentas generadas (empleados activos)
SELECT nombre, 
	MAX(cantidad) AS maxima_venta,
	SUM(cantidad) AS total_vendido
FROM empleados
	INNER JOIN pagos
	ON empleados.empleado_id = pagos.empleado_id
WHERE activo = true
GROUP BY nombre
ORDER BY total_vendido DESC;

Una peque帽a vista de los clientes, el MAX, MIN y el promedio que han pagado al rentar sus pel铆culas.

SELECT (nombre, apellido) AS cliente,
	   MAX(cantidad) AS max_pago,
	   MIN(cantidad) AS min_pago,
	   AVG(cantidad) AS promedio_pago
FROM 
	clientes INNER JOIN pagos ON
	clientes.cliente_id = pagos.cliente_id
GROUP BY cliente
ORDER BY promedio_pago DESC;

Entendido, B谩sico pero muy funcional

SELECT titulo, MAX(precio_renta) AS precio_maximo_renta
FROM peliculas
GROUP BY titulo
ORDER BY precio_maximo_renta DESC;

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

SELECT clasificacion, AVG(precio_renta) as precio_promedio , count(*) NumerodePeliculas, AVG(duracion), AVG(duracion_renta)
FROM peliculas
GROUP BY clasificacion
ORDER BY precio_promedio DESC;

Ingreso por empleado:
SELECT empleado_id, SUM(cantidad) AS ingreso_por_empelado
FROM pagos
GROUP BY empleado_id
ORDER BY ingreso_por_empelado DESC

Yo realic茅 esta consulta

SELECT COUNT(nombre) as conteo
FROM actores
GROUP BY actores
ORDER BY conteo;

Y obtuve que no hay nombres repetidos en la tabla actores

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

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.

SELECT 
	clasificacion, 
	MIN(precio_renta) AS precio_minimo, 
	MAX(precio_renta) AS precio_maximo
FROM peliculas
GROUP BY clasificacion;

Duraci贸n promedio

SELECT clasificacion, AVG(duracion) AS Promedio_duracion
FROM peliculas
GROUP BY clasificacion
ORDER BY Promedio_duracion DESC;
SELECT clasificacion, MIN(precio_renta), MAX(precio_renta), SUM(precio_renta), COUNT(*) FROM peliculas GROUP BY clasificacion

El siguiente query muestra la cantidad de pel铆culas que se tienen por tienda utilizando la tabla inventarios

select
	count(1) titulos_por_tienda,
	tienda_id
from
	inventarios i
group by
	tienda_id
order by
	titulos_por_tienda;

馃槂

SELECT clasificacion, 
MAX(precio_renta) as max_precio, 
MIN(precio_renta) as min_precio, 
SUM(precio_renta) as suma,
COUNT(pelicula_id) as cantidad,
AVG(precio_renta) as precio_promedio,
AVG(duracion) as duracion_promedio,
AVG(duracion_renta) as duracion_renta_promedio
from peliculas
group by clasificacion
order by cantidad desc```

este query mira cuales fueron los clientes con mayores pagos

<SELECT cliente_id, max (cantidad) AS clientes_con_mas_pagos
FROM pagos
GROUP BY cliente_id
ORDER BY clientes_con_mas_pagos DESC;>
SELECT e.nombre, t.tienda_id, r.renta_id, c.nombre, c.cliente_id 
FROM empleados AS e
LEFT JOIN  tiendas AS t
ON e.tienda_id= t.tienda_id
LEFT JOIN rentas AS r
ON e.empleado_id= r.empleado_id
INNER JOIN clientes AS c
ON r.cliente_id= c.cliente_id;

-- Mostrando los nombres de los lenguajes existentes
SELECT nombre
FROM lenguajes
GROUP BY nombre;

-- Mostrando la fecha de pago segun la cantidad de peliculas en ese tiempo

SELECT fecha_pago, AVG(cantidad) AS fecha_cantidad
FROM pagos
GROUP BY fecha_pago
ORDER BY fecha_cantidad DESC;

-- Mostrando los nombres de los empleados ordenados por apellido de mayor a menor y su estado
SELECT apellido,nombre,activo, COUNT(*) 
FROM empleados
GROUP BY apellido,nombre,activo
ORDER BY apellido DESC;


SELECT peliculas.titulo, CONCAT(actores.nombre, ' ', actores.apellido) AS nombreactor
FROM peliculas INNER JOIN peliculas_actores ON peliculas.pelicula_id = peliculas_actores.pelicula_id 
INNER JOIN actores ON peliculas_actores.actor_id = actores.actor_id
ORDER BY peliculas.titulo, nombreactor;
-- Muestra la cantidad de clientes inscritos por tienda
SELECT tienda_id, COUNT(*) as numero_clientes
FROM clientes
GROUP BY tienda_id
ORDER BY numero_clientes DESC;

--Muestra el total gastado de los clientes
SELECT cliente_id, SUM(cantidad) AS total_gastado
FROM pagos
GROUP BY cliente_id
ORDER BY total_gastado DESC;

Select que trae las pel铆culas con sus actores, aqu铆 hace INNER JOIN con la tabla intermedia 鈥減eliculas.actores鈥 y esta a su vez con la tabla de 鈥渁ctores鈥, y para unir los nombres y apellidos del actor usa la funci贸n CONCAT, a su vez esta ordenado por el titulo de la pelicula y el nombre del actor.

SELECT peliculas.titulo, CONCAT(actores.nombre, ' ', actores.apellido) AS nombreactor
FROM peliculas INNER JOIN peliculas_actores ON peliculas.pelicula_id = peliculas_actores.pelicula_id 
INNER JOIN actores ON peliculas_actores.actor_id = actores.actor_id
ORDER BY peliculas.titulo, nombreactor;

me parece muy interesante ver como por medio de la agregaci贸n de datos podemos realizar una consulta r谩pida de an谩lisis, como respuesta al reto se me ocurrieron diversos ejemplos, comparto algunos a continuaci贸n:

-- precios de renta m谩ximo, m铆nimo y promedio
SELECT MAX(precio_renta), MIN(precio_renta), AVG(precio_renta)
FROM peliculas;
--Cantidad de transacciones por cliente
SELECT cliente_id, COUNT (renta_id) AS Transacciones
FROM pagos
GROUP BY cliente_id
ORDER BY Transacciones DESC;
--Promedio de renta y reemplazo por clasificaci贸n
SELECT clasificacion, AVG (precio_renta) AS promedio_$renta, AVG(costo_reemplazo) AS promedio_$reemplazo
FROM peliculas
GROUP BY clasificacion
ORDER BY promedio_$reemplazo DESC;
--Promedio de renta de pel铆culas con caracteri铆sticas especiales
SELECT caracteristicas_especiales, AVG (precio_renta) AS promedio_renta
FROM peliculas
GROUP BY caracteristicas_especiales
ORDER BY promedio_renta DESC;

Query: Renta por Categor铆a