From 0b2c6e11ce26c0869436c6b6e7347003092732c0 Mon Sep 17 00:00:00 2001 From: Eduardo Romero Date: Wed, 26 Nov 2025 17:50:27 +0100 Subject: [PATCH] Add SQL lab solutions --- solution-AggregationTransformation.sql | 82 ++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 solution-AggregationTransformation.sql diff --git a/solution-AggregationTransformation.sql b/solution-AggregationTransformation.sql new file mode 100644 index 0000000..8a7e1d9 --- /dev/null +++ b/solution-AggregationTransformation.sql @@ -0,0 +1,82 @@ +USE sakila; + +SELECT MAX(length) AS max_duration, MIN(length) AS min_duration +FROM film; + +(SELECT + title, length +FROM film +ORDER BY length DESC, title +LIMIT 1) +UNION ALL +(SELECT + title, length +FROM film +ORDER BY length, title +LIMIT 1); + +SELECT + FLOOR(AVG(length) / 60) AS hours, + FLOOR(AVG(length) % 60) AS minutes +FROM film; + +SELECT + datediff(MAX(rental_date),MIN(rental_date)) as Days_Operating +FROM rental; + +SELECT + monthname(rental_date) AS 'rental_month', + dayname(rental_date) AS rental_weekday +FROM rental +LIMIT 20; + +SELECT rental_date, + CASE + WHEN WEEKDAY(rental_date) IN (5, 6) THEN 'Weekend' + ELSE 'Workday' + END AS DAY_TYPE +FROM rental; + +SELECT + title, + IFNULL(CONCAT(rental_duration, ''), 'Not Available') AS rental_duration +FROM film +ORDER BY title ASC; + +SELECT + CONCAT(first_name, ' ', last_name) AS full_name, + LEFT(email, 3) AS email_prefix +FROM customer +ORDER BY last_name ASC; + +SELECT + last_name, + COUNT(*) AS number_last_names +FROM actor +GROUP BY last_name +HAVING COUNT(*) = 1; + + +SELECT COUNT(*) AS total_films +FROM film; + +SELECT rating, COUNT(*) AS num_films +FROM film +GROUP BY rating; + + +SELECT rating, COUNT(*) AS num_films +FROM film +GROUP BY rating +ORDER BY num_films DESC; + +SELECT rating, ROUND(AVG(length), 2) AS avg_duration +FROM film +GROUP BY rating +ORDER BY avg_duration DESC; + +SELECT rating, ROUND(AVG(length), 2) AS avg_duration +FROM film +GROUP BY rating +HAVING AVG(length) > 120; +