Video Club Tarea 2 - Solución 1. Devolver el identificador de los clientes que, habiendo alquilado películas, sólo alquilaron películas en la sucursal donde se hicieron socios. select distinct (a.id_cliente from alquileres a, clientes c where a.id_sucursal = c.id_sucursal and a.id_cliente = c.id_cliente and not exists ( from alquileres a1 where a1.id_cliente = a.id_cliente and a1.id_sucursal <> c.id_sucursal 2. Obtener las parejas de sucursales (idsucursal1, idsucursal2 que tienen exactamente las mismas películas, sin considerar la cantidad de ejemplares que existen en cada una de ellas. ATENCION: no deben devolverse parejas simétricas. select distinct (i1.id_sucursal, i2.id_sucursal as (idsucursal1, idsucursal2 from inventario i1, inventario i2 where i1.id_pelicula = i2.id_pelicula and i1.id_sucursal < i2.id_sucursal and not exists from inventario i3 where i3.id_sucursal = i1.id_sucursal and not exists ( from inventario i4 where i4.id_sucursal = i2.id_sucursal and i4.id_pelicula = i3.id_pelicula and not exists from inventario i3 where i3.id_sucursal = i2.id_sucursal and not exists ( from inventario i4 where i4.id_sucursal = i1.id_sucursal and i4.id_pelicula = i3.id_pelicula Página 1 de 5
3. Para cada película que ha sido alquilada devolver el identificador de la misma y la duración del alquiler más reciente (duración. Tener en cuenta que puede existir más de un alquiler en la fecha más reciente, en cuyo caso se desea devolver la máxima duración de ese conjunto de alquileres. Para los alquileres que no han sido devueltos la duración a devolver corresponde al tiempo transcurrido entre la fecha de alquiler y el momento en que se realiza la consulta. select a.id_pelicula, max(coalesce(a.fecha_devolucion, now(-a.fecha as duracion from alquileres a ( from alquileres a1 where a.id_pelicula = a1.id_pelicula and a1.fecha > a.fecha group by id_pelicula 4. Devolver el identificador de las sucursales que poseen más socios que el promedio de socios por sucursal pero que tienen registrados menos alquileres que el promedio de cantidad de alquileres por sucursal. Para esta consulta pueden usar subconsultas en el FROM select id_sucursal from clientes group by id_sucursal having count(*> ( select avg(cantsocios from (select count(* as cantsocios from clientes group by id_sucursal as s intersect select id_sucursal from alquileres group by id_sucursal having count(*< ( select avg(cantalquileres from (select count(* as cantalquileres from alquileres group by id_sucursal as a Página 2 de 5
5. Devolver el identificador, nombre y apellido de empleados activos que trabajan en la sucursal con mayor cantidad de alquileres, pero que nunca recibieron el pago de ningún alquiler. select p.id_personal, p.nombre, p.apellido from personal p where p.activo is true and p.id_sucursal in (select a.id_sucursal from alquileres a group by a.id_sucursal having count(* >= ALL (select count(* from alquileres a2 group by a2.id_sucursal and p.id_personal not in( select id_personal_recibe_pago from pagos 6. Devolver el identificador, título y cantidad de actores (cant_actores de películas tales que no hay otra película que tiene costo de reemplazo mayor que ella y con la cual comparte actores. select pe.id_pelicula, pe.titulo, count(* as cant_actores from actores_de_peliculas act NATURAL JOIN peliculas pe from actores_de_peliculas act3 NATURAL JOIN peliculas pe2 act3.id_actor = act2.id_actor Otra solución considerada como válida: select pe.id_pelicula, pe.titulo, 0 as cant_actores from peliculas pe from actores_de_peliculas act where act.id_pelicula = pe.id_pelicula UNION select pe.id_pelicula, pe.titulo, count(* as cant_actores Página 3 de 5
from actores_de_peliculas act NATURAL JOIN peliculas pe from actores_de_peliculas act3 NATURAL JOIN peliculas pe2 act3.id_actor = act2.id_actor select pe.id_pelicula, pe.titulo, count(id_actor as cant_actores from actores_de_peliculas act RIGHT JOIN peliculas pe on (act.id_pelicula = pe.id_pelicula from actores_de_peliculas act3 RIGHT JOIN peliculas pe2 on (act3.id_pelicula = pe2.id_pelicula act3.id_actor = act2.id_actor ; 7. Devolver identificador, nombre y apellido de aquellos clientes que han alquilado todas las peliculas que se encuentran en las sucursales de la ciudad donde vive. Tener en cuenta que los alquileres pueden haber sido realizados en sucursales que no estén ubicadas en la ciudad donde vive el cliente. select C.id_cliente from clientes C from Inventario I natural join sucursales S where S.id_ciudad = C.id_ciudad and not exists from alquileres A where A.id_pelicula = I.id_pelicula and A.id_cliente = C.id_cliente and exists from sucursales s where c.id_ciudad = s.id_ciudad Página 4 de 5
8. Devolver identificador y nombre de actores que han participado en películas con clasificación NC-17 de todas las categorias conocidas select A.id_actor, A.nombre from actores A from categorias C from (categorias_de_peliculas CP natural join actores_de_peliculas AP natural join peliculas P where P.clasificacion = 'NC-17' and CP.id_categoria = C.id_categoria and AP.id_actor = A.id_actor Página 5 de 5