From 9e584381c5abf18b74765cbc3268524cdbe85d04 Mon Sep 17 00:00:00 2001 From: Irma Fernandez Date: Thu, 18 Sep 2025 14:06:52 +0200 Subject: [PATCH 1/4] Solved Lab 3 --- solutions_lab3.sql | 96 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 solutions_lab3.sql diff --git a/solutions_lab3.sql b/solutions_lab3.sql new file mode 100644 index 0000000..00594db --- /dev/null +++ b/solutions_lab3.sql @@ -0,0 +1,96 @@ +USE sakila; +-- CHALLENGE 1 + +/* 1.1 Shortest and longest movie durations (minutes) */ +SELECT + MIN(length) AS min_duration, + MAX(length) AS max_duration +FROM film; + +/* 1.2 Average movie duration in hours and minutes */ +SELECT + FLOOR(AVG(length) / 60) AS avg_hours, + FLOOR(AVG(length)) % 60 AS avg_minutes +FROM film; + +/* 2.1 Days the company has been operating (based on rentals) */ +SELECT + DATEDIFF(MAX(rental_date), MIN(rental_date)) AS days_operating +FROM rental; + +/* 2.2 Show month and weekday for rentals (20 rows) */ +SELECT + rental_id, + rental_date, + DATE_FORMAT(rental_date, '%M') AS rental_month, + DATE_FORMAT(rental_date, '%W') AS rental_weekday +FROM rental +ORDER BY rental_date +LIMIT 20; + +/* 2.3 Add DAY_TYPE = 'weekend' or 'workday' (20 rows) */ +SELECT + rental_id, + rental_date, + CASE + WHEN DAYOFWEEK(rental_date) IN (1,7) THEN 'weekend' -- 1=Sun, 7=Sat + ELSE 'workday' + END AS day_type +FROM rental +ORDER BY rental_date +LIMIT 20; + +/* 3. Film titles and rental duration, replace NULL with 'Not Available' */ + +SELECT + title, + IFNULL(CAST(rental_duration AS CHAR), 'Not Available') AS rental_duration +FROM film +ORDER BY title ASC; + +/* 4. Full name + first 3 chars of email, order by last name */ +SELECT + CONCAT(first_name, ' ', last_name) AS full_name, + SUBSTRING(email, 1, 3) AS email_prefix +FROM customer +ORDER BY last_name ASC, first_name ASC; + + -- CHALLENGE 2 + +/* 1.1 Total number of films released */ +SELECT COUNT(*) AS total_films FROM film; + +/* 1.2 Number of films for each rating */ +SELECT + rating, + COUNT(*) AS films +FROM film +GROUP BY rating +ORDER BY rating; + +/* 1.3 Number of films for each rating, sorted by count descending */ +SELECT + rating, + COUNT(*) AS films +FROM film +GROUP BY rating +ORDER BY films DESC, rating ASC; + +/* 2.1 Mean film duration per rating, rounded to 2 decimals */ +SELECT + rating, + ROUND(AVG(length), 2) AS mean_duration_minutes +FROM film +GROUP BY rating +ORDER BY rating; + +/* 2.2 Ratings with mean duration > 2 hours (120 minutes) */ +SELECT + rating, + ROUND(AVG(length), 2) AS mean_duration_minutes +FROM film +GROUP BY rating +HAVING AVG(length) > 120 +ORDER BY mean_duration_minutes DESC; + +/* 3. Last names that are NOT repeated in actor table */ From 9cbeed3295f5958a5b99278e45ffa27336f5e603 Mon Sep 17 00:00:00 2001 From: Irma Fernandez Date: Thu, 18 Sep 2025 14:14:13 +0200 Subject: [PATCH 2/4] Fix order mx an min duration columns --- solutions_lab3.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/solutions_lab3.sql b/solutions_lab3.sql index 00594db..ac15651 100644 --- a/solutions_lab3.sql +++ b/solutions_lab3.sql @@ -3,9 +3,9 @@ USE sakila; /* 1.1 Shortest and longest movie durations (minutes) */ SELECT - MIN(length) AS min_duration, - MAX(length) AS max_duration -FROM film; + MAX(length) AS max_duration, + MIN(length) AS min_duration + FROM film; /* 1.2 Average movie duration in hours and minutes */ SELECT From 3e378c773edce225b7cc6fadc2398c481712ccb6 Mon Sep 17 00:00:00 2001 From: Irma Fernandez Date: Thu, 18 Sep 2025 14:19:22 +0200 Subject: [PATCH 3/4] Fix 2 order mx an min duration columns --- solutions_lab3.sql | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/solutions_lab3.sql b/solutions_lab3.sql index ac15651..0364e5f 100644 --- a/solutions_lab3.sql +++ b/solutions_lab3.sql @@ -2,10 +2,8 @@ USE sakila; -- CHALLENGE 1 /* 1.1 Shortest and longest movie durations (minutes) */ -SELECT - MAX(length) AS max_duration, - MIN(length) AS min_duration - FROM film; +SELECT MAX(rental_duration) AS max_duration, MIN(rental_duration) AS min_duration +FROM film; /* 1.2 Average movie duration in hours and minutes */ SELECT From c684e23ba9e1c88932a26ff3be2e47f27f2fae47 Mon Sep 17 00:00:00 2001 From: Irma Fernandez Date: Thu, 18 Sep 2025 14:26:11 +0200 Subject: [PATCH 4/4] Fix 2 order mx an min duration columns --- solutions_lab3.sql | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/solutions_lab3.sql b/solutions_lab3.sql index 0364e5f..1c5a0c2 100644 --- a/solutions_lab3.sql +++ b/solutions_lab3.sql @@ -92,3 +92,11 @@ HAVING AVG(length) > 120 ORDER BY mean_duration_minutes DESC; /* 3. Last names that are NOT repeated in actor table */ +-- Challenge 2 - 3 Bonus +SELECT + last_name +FROM actor +GROUP BY last_name +HAVING COUNT(*) = 1 +ORDER BY last_name; +