Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions lab_4.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
USE sakila;

-- CHALLENGE- Joining on mulitiple tables
-- 1 - list the number of films per category

SELECT
c.name AS category_name,
COUNT(fc.film_id) AS number_of_films
FROM category AS c
INNER JOIN film_category AS fc
ON c.category_id = fc.category_id
GROUP BY
c.name;

-- 2 - Retrieve the store ID, city and country for each store
SELECT
s.store_id,
ci.city,
co.country
FROM store AS s
INNER JOIN address AS a
ON s.address_id = a.address_id
INNER JOIN city AS ci
ON a.city_id = ci.city_id
INNER JOIN country AS co
ON ci.country_id = co.country_id;

-- 3 - calculate the total revenue generated by each store in dollars
SELECT
s.store_id,
SUM(p.amount) AS total_revenue
FROM store AS s
INNER JOIN staff AS st
ON s.store_id = st.store_id
INNER JOIN payment AS p
ON st.staff_id = p.staff_id
GROUP BY
s.store_id;

-- 4 - Determine the average running time of films for each category
SELECT
c.name AS category_name,
ROUND(AVG(f.length), 2) AS average_running_time
FROM category AS c
INNER JOIN film_category AS fc
ON c.category_id = fc.category_id
INNER JOIN film AS f
ON fc.film_id = f.film_id
GROUP BY
C.NAME;

-- 5 - Identify the film categories with the longest average running time
SELECT
c.name AS category_name,
ROUND(AVG(f.length), 2) AS average_running_time
FROM category AS c
INNER JOIN film_category AS fc
ON c.category_id = fc.category_id
INNER JOIN film AS f
ON fc.film_id = f.film_id
GROUP BY
c.name
ORDER BY average_running_time DESC
LIMIT 1;

-- 6 - Display the top 10 most frequently rented movies in descending order
SELECT
f.title,
COUNT(r.rental_id) AS rental_count
FROM film AS f
INNER JOIN inventory AS i
ON f.film_id = i.film_id
INNER JOIN rental AS r
ON i.inventory_id = r.inventory_id
GROUP BY
f.title
ORDER BY rental_count desc
LIMIT 10;

-- 7 - Determine if "Academy Dinosaur" can be rented from store 1
SELECT
f.title,
i.store_id,
COUNT(i.inventory_id) AS copies_available
FROM film AS f
INNER JOIN inventory AS i
ON f.film_id = i.film_id
WHERE f.title = 'Academy Dinosaur'
AND i.store_id = 1
GROUP BY
f.title, i.store_id;

-- 8 - Provide a list of all distinct film titiles
SELECT
f.title,
CASE
WHEN i.inventory_id IS NULL THEN 'NOT available'
ELSE 'Available'
END AS availability_status
FROM film AS f
LEFT JOIN inventory AS i
ON f.film_id = i.film_id;