From 740d0d416d30edeacd84e4f2c27ce534df7c8a5a Mon Sep 17 00:00:00 2001 From: jhenifherAlmeida Date: Mon, 29 Sep 2025 18:04:10 +0200 Subject: [PATCH] And solutions for SQL data aggregation and transformation lab --- lab-agg-tranf.sql | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 lab-agg-tranf.sql diff --git a/lab-agg-tranf.sql b/lab-agg-tranf.sql new file mode 100644 index 0000000..4831e42 --- /dev/null +++ b/lab-agg-tranf.sql @@ -0,0 +1,86 @@ +USE sakila; + +SELECT + MIN(length) AS min_duration, + MAX(length) AS max_duration +FROM film; + + +SELECT + FLOOR(AVG(length) / 60) AS avg_hours, + FLOOR(AVG(length) % 60) AS avg_minutes +FROM film; + +SELECT + DATEDIFF(MAX(rental_date), MIN(rental_date)) AS operating_days +FROM rental; + +SELECT + rental_id, + rental_date, + MONTH(rental_date) AS rental_month, + DAYNAME(rental_date) AS rental_weekday +FROM rental +LIMIT 20; + +SELECT + rental_id, + rental_date, + CASE + WHEN DAYOFWEEK(rental_date) IN (1,7) THEN 'weekend' + ELSE 'workday' + END AS day_type +FROM rental +LIMIT 20; + +SELECT + title, + IFNULL(rental_duration, 'Not available') AS rental_duration +FROM film +ORDER BY title ASC; + + +SELECT + CONCAT(first_name, ' ', last_name) AS full_name, + SUBSTRING(email, 1, 3) AS email_prefix +FROM customer +ORDER BY last_name ASC; + + +SELECT COUNT(*) AS total_films +FROM film; + +SELECT rating, COUNT(*) AS film_count +FROM film +GROUP BY rating; + +SELECT rating, COUNT(*) AS film_count +FROM film +GROUP BY rating +ORDER BY film_count 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; + +SELECT last_name +FROM actor +GROUP BY last_name +HAVING COUNT(*) = 1; + + + + + + + \ No newline at end of file