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
78 changes: 78 additions & 0 deletions lab_sql_joins.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
-- Write SQL queries to perform the following tasks using the Sakila database:

-- 1. List the number of films per category.
SELECT film_category.category_id AS category_films,
COUNT(film.film_id) AS number_of_films
FROM sakila.film
JOIN sakila.film_category
ON film_category.film_id = film.film_id
GROUP BY film_category.category_id;


-- 2. Retrieve the store ID, city, and country for each store.
SELECT store.store_id, city.city AS city_name, country.country AS country_name
FROM sakila.store
JOIN sakila.address ON store.address_id = address.address_id
JOIN sakila.city ON city.city_id = address.city_id
JOIN sakila.country ON city.country_id = country.country_id;


-- 3. Calculate the total revenue generated by each store in dollars.
-- a minha lofica é: a coluna staff reune a store + payment,
-- ou seja staff está ligado a store com store_id e ligado a payment com staff_id
-- store ↔ staff (via store_id) ↔ payment (via staff_id)
SELECT store.store_id,
SUM(payment.amount) AS total_revenue
FROM sakila.store
JOIN sakila.staff ON store.store_id = staff.store_id
JOIN sakila.payment ON staff.staff_id = payment.staff_id
GROUP BY store.store_ID;


-- 4. Determine the average running time of films for each category.
SELECT film_category.category_id AS category_films,
AVG(film.length) AS average_time
FROM sakila.film
JOIN sakila.film_category ON film.film_id = film_category.film_id
GROUP BY film_category.category_id;


-- Bonus:

-- 5. Identify the film categories with the longest average running time.
SELECT film_category.category_id AS category_films,
AVG(film.length) AS average_time
FROM sakila.film
JOIN sakila.film_category ON film.film_id = film_category.film_id
GROUP BY film_category.category_id
LIMIT 1;


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

-- 7. Determine if "Academy Dinosaur" can be rented from Store 1.
SELECT film.title
FROM sakila.film
JOIN sakila.inventory ON film.film_id = inventory.film_id
JOIN sakila.store ON inventory.store_id = store.store_id
WHERE film.title = "Academy Dinosaur" AND store.store_id = 1;

-- 8. 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 DISTINCT film.title,
CASE
WHEN inventory.film_id IS NULL THEN 'NOT available'
ELSE 'Available'
END AS availability_status
FROM sakila.film
LEFT JOIN sakila.inventory ON film.film_id = inventory.film_id;