From 5cb6dffb511db42b1509d8376d3aa98d8f81b542 Mon Sep 17 00:00:00 2001 From: Ricardo Higginson Date: Tue, 7 Jul 2026 20:30:22 +0200 Subject: [PATCH] lab solved --- lab_solved.sql | 106 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 lab_solved.sql diff --git a/lab_solved.sql b/lab_solved.sql new file mode 100644 index 0000000..da7d808 --- /dev/null +++ b/lab_solved.sql @@ -0,0 +1,106 @@ + +-- List the number of films per category. +SELECT + c.name AS category, + COUNT(fc.film_id) AS number_of_films +FROM category c +JOIN film_category fc + ON c.category_id = fc.category_id +GROUP BY c.name +ORDER BY number_of_films DESC; + +-- Retrieve the store ID, city, and country for each store. +SELECT + s.store_id, + ci.city, + co.country +FROM store s +JOIN address a + ON s.address_id = a.address_id +JOIN city ci + ON a.city_id = ci.city_id +JOIN country co + ON ci.country_id = co.country_id; + +-- Calculate the total revenue generated by each store in dollars. +SELECT + s.store_id, + SUM(p.amount) AS total_revenue +FROM store s +JOIN staff st + ON s.store_id = st.store_id +JOIN payment p + ON st.staff_id = p.staff_id +GROUP BY s.store_id +ORDER BY total_revenue DESC; + +-- Determine the average running time of films for each category. + +SELECT + c.name AS category, + ROUND(AVG(f.length), 2) AS average_running_time +FROM category c +JOIN film_category fc + ON c.category_id = fc.category_id +JOIN film f + ON fc.film_id = f.film_id +GROUP BY c.name +ORDER BY average_running_time DESC; + +-- Identify the film categories with the longest average running time. + +SELECT + c.name AS category, + ROUND(AVG(f.length), 2) AS average_running_time +FROM category c +JOIN film_category fc + ON c.category_id = fc.category_id +JOIN film f + ON fc.film_id = f.film_id +GROUP BY c.name +ORDER BY average_running_time DESC +LIMIT 1; + + +-- Display the top 10 most frequently rented movies in descending order. + +SELECT + f.title, + COUNT(r.rental_id) AS rental_count +FROM film f +JOIN inventory i + ON f.film_id = i.film_id +JOIN rental r + ON i.inventory_id = r.inventory_id +GROUP BY f.title +ORDER BY rental_count DESC +LIMIT 10; + +-- Determine if "Academy Dinosaur" can be rented from Store 1. + +SELECT + f.title, + CASE + WHEN COUNT(i.inventory_id) > 0 THEN 'Available' + ELSE 'NOT available' + END AS availability +FROM film f +LEFT JOIN inventory i + ON f.film_id = i.film_id + AND i.store_id = 1 +WHERE f.title = 'ACADEMY DINOSAUR' +GROUP BY f.title; + +-- Provide a list of all distinct film titles, along with their availability status in the inventory. Include a column indicating whether each title is 'Available' or 'NOT available.' Note that there are 42 titles that are not in the inventory, and this information can be obtained using a CASE statement combined with IFNULL." + +SELECT + f.title, + CASE + WHEN IFNULL(COUNT(i.inventory_id), 0) > 0 THEN 'Available' + ELSE 'NOT available' + END AS availability +FROM film f +LEFT JOIN inventory i + ON f.film_id = i.film_id +GROUP BY f.title +ORDER BY f.title; \ No newline at end of file