A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Agregaci贸n de datos

19/33
Recursos

Aportes 75

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta 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.

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

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

Asi ordene las peliculas por el minimo

select titulo, min(precio_renta)
from peliculas
group by titulo
order by min(precio_renta);
-- precio maximo y min  por peliculas 
SELECT titulo, MAX(precio_renta), MIN(precio_renta)
FROM peliculas
GROUP BY titulo;

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;

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

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

COUNT() + GROUP BY(): Contar y agrupar por categorias.

Query: Promedio de Duraci贸n de la Renta por Categor铆a

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

Obtener la tabla de precio ordenados descendemente

SELECT titulo, MAX(precio_renta)
FROM peliculas
GROUP BY titulo
ORDER BY MAX DESC;
--Cantidad de peliculas en las que participa cada actores
SELECT COUNT(a.pelicula_id) AS cantidad_peliculas, c.nombre || ' ' || c.apellido AS actor
FROM peliculas a
JOIN peliculas_actores b ON a.pelicula_id=b.pelicula_id
JOIN actores c ON b.actor_id=c.actor_id
GROUP BY actor
ORDER BY cantidad_peliculas DESC

N煤mero de pel铆culas publicada por a帽o en cada segmento:

select clasificacion, anio_publicacion, count(*) as numero_peliculas_publicada
from peliculas
group by clasificacion, anio_publicacion
order by clasificacion;

Me tarde en mi reto pero aqui mi query algo tricky


-- PELICULAS MAS RENTADAS
SELECT peliculas.pelicula_id, peliculas.titulo, string_agg(DISTINCT CONCAT(actores.nombre, ' ', actores.apellido), ',') as nombes_actores  , count(*) AS rentas_acumuladas 
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
ORDER BY rentas_acumuladas DESC;

Obtengo las peliculas mas rentadas, y los actores que participan en ellas.

Este es mi resultado al reto:

-- Muestra de los actores con m谩s participaciones
SELECT nombre, apellido, count(*) AS apariciones FROM peliculas_actores as p
JOIN actores AS a on
    p.actor_id = a.actor_id
GROUP BY  a.actor_id
ORDER BY apariciones DESC;


SELECT TRUNC(duracion/20)*20 AS duracion20, COUNT(*) AS numero_de_peliculas,
MIN(precio_renta) AS precio_minimo, MAX(precio_renta) AS precio_maximo
FROM public.peliculas -- Seleccionar de la tabla pel铆culas.
GROUP BY duracion20 -- Agrupar por duraci贸n en intervalos de 20 minutos.
ORDER BY duracion20; -- Ordenar por duraci贸n.```
SELECT anio_publicacion, COUNT(*)
FROM peliculas
GROUP BY anio_publicacion;
ORDER BY anio_publicacion DESC;

Muestra los actores que actuaron en una pel铆cula, orden ascendente seg煤n el t铆tulo de la pel铆cula.

select a.nombre, a.apellido, q.titulo
from peliculas_actores as p
join actores as a on
	a.actor_id = p.actor_id
join peliculas as q on 
	p.pelicula_id = q.pelicula_id
order by titulo asc;

reto
鈥 # El n煤mero de pel铆culas alquiladas seg煤n la categor铆a y agrupado por pa铆ses

-- -- # El n煤mero de pel铆culas alquiladas seg煤n la categor铆a  y agrupado por pa铆ses

SELECT pa.pais , ca.nombre, count(r)  as numero_rentas
FROM categorias ca
INNER JOIN peliculas_categorias pc on pc.categoria_id = ca.categoria_id
INNER JOIN peliculas pe on pe.pelicula_id = pc.pelicula_id
INNER JOIN inventarios i on i.pelicula_id = pe.pelicula_id
INNER JOIN rentas r on r.inventario_id = i.inventario_id
INNER JOIN clientes cl on cl.cliente_id = r.cliente_id
INNER JOIN direcciones d on d.direccion_id = cl.direccion_id
INNER JOIN ciudades ci on ci.ciudad_id = d.ciudad_id
INNER JOIN paises pa on pa.pais_id = ci.pais_id
GROUP BY ca.nombre, pa.pais
ORDER BY pa.pais ASC

M谩ximo agrupado por clasificaci贸n y ordenado

SELECT clasificacion, MAX(precio_renta) FROM peliculas
GROUP BY clasificacion
ORDER BY MAX(precio_renta);

M铆nimo agrupado por clasificaci贸n y ordenado

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

Conteo por clasificaci贸n

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

Promedio por clasificaci贸n

SELECT clasificacion, AVG(precio_renta) AS Promedio
FROM peliculas
GROUP BY clasificacion;

La duraci贸n promedio por categoria

SELECT categ.nombre as categoria, AVG(peli.duracion) as duracion_promedio from peliculas peli 
INNER JOIN peliculas_categorias pc ON pc.pelicula_id = peli.pelicula_id
INNER JOIN categorias categ ON categ.categoria_id = pc.categoria_id GROUP BY categoria;

Cantidad de rentas hechas por categoria,

SELECT ctg.categoria_id, ctg.nombre, COUNT(*) AS cantidad_rentas
FROM categorias as ctg
JOIN peliculas_categorias as pel
    ON ctg.categoria_id = pel.categoria_id
JOIN peliculas as peli
    ON pel.pelicula_id = peli.pelicula_id
JOIN inventarios as inv
    ON peli.pelicula_id = inv.pelicula_id
JOIN rentas as ren
    ON ren.inventario_id =inv.inventario_id
GROUP BY ctg.categoria_id, ctg.nombre
ORDER BY cantidad_rentas DESC;
-- Evitar el uso del   *  en los SELECT:

Algo que he notado es que ning煤n profesor se detiene a explicar porqu茅 evitar el *, y esto ya lo vienen arrastrando en todos los cursos de BD que he visto.

SELECT MAX(precio_renta)
FROM peliculas;

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

-- RETO
SELECT MIN(precio_renta)
FROM peliculas;

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

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;

--RETO

SELECT actor_id, COUNT(pelicula_id) AS numero_de_peliculas
FROM peliculas_actores
GROUP BY actor_id
ORDER BY numero_de_peliculas DESC;

SELECT categoria_id, COUNT(pelicula_id) AS numero_de_peliculas
FROM peliculas_categorias
GROUP BY categoria_id
ORDER BY numero_de_peliculas DESC;

para ver los actores de cada pelicula

select nombre, apellido, titulo as pelicula, descripci贸n
from actores
left join peliculas on actores.actor_id = peliculas.pelicula_id
order by nombre
;

-- Top 10 clientes que m谩s han comprado
SELECT cliente_id,SUM(cantidad) AS pagado
FROM pagos
GROUP BY cliente_id
ORDER BY pagado DESC
LIMIT 10;

La tercera clasificaci贸n m谩s pedida

SELECT clasificacion, COUNT()
FROM peliculas
GROUP BY clasificacion
ORDER BY COUNT(
) DESC
LIMIT 1 OFFSET 2