diff --git a/lab_sql_joins.sql b/lab_sql_joins.sql new file mode 100644 index 0000000..57493c2 --- /dev/null +++ b/lab_sql_joins.sql @@ -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; + + +