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
131 changes: 131 additions & 0 deletions lab_subqueries.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
-- 1. Number of copies of "Hunchback Impossible" in inventory
SELECT
COUNT(*) AS number_of_copies
FROM inventory
WHERE film_id = (
SELECT film_id
FROM film
WHERE title = 'HUNCHBACK IMPOSSIBLE'
);

-- 2. Films longer than the average length
SELECT
title,
length
FROM film
WHERE length > (
SELECT AVG(length)
FROM film
);

-- 3. Actors who appear in "Alone Trip"
SELECT
first_name,
last_name
FROM actor
WHERE actor_id IN (
SELECT actor_id
FROM film_actor
WHERE film_id = (
SELECT film_id
FROM film
WHERE title = 'ALONE TRIP'
)
);

-- 4. Movies categorized as Family films
SELECT
title
FROM film
WHERE film_id IN (
SELECT film_id
FROM film_category
WHERE category_id = (
SELECT category_id
FROM category
WHERE name = 'Family'
)
);

-- 5. Customers from Canada using subqueries
SELECT
first_name,
last_name,
email
FROM customer
WHERE address_id IN (
SELECT address_id
FROM address
WHERE city_id IN (
SELECT city_id
FROM city
WHERE country_id = (
SELECT country_id
FROM country
WHERE country = 'Canada'
)
)
);

-- 5. Customers from Canada using joins
SELECT
c.first_name,
c.last_name,
c.email
FROM customer c
JOIN address a
ON c.address_id = a.address_id
JOIN city ci
ON a.city_id = ci.city_id
JOIN country co
ON ci.country_id = co.country_id
WHERE co.country = 'Canada';

-- 6. Films starred by the most prolific actor
SELECT
title
FROM film
WHERE film_id IN (
SELECT film_id
FROM film_actor
WHERE actor_id = (
SELECT actor_id
FROM film_actor
GROUP BY actor_id
ORDER BY COUNT(film_id) DESC
LIMIT 1
)
);

-- 7. Films rented by the most profitable customer
SELECT DISTINCT
f.title
FROM film f
JOIN inventory i
ON f.film_id = i.film_id
JOIN rental r
ON i.inventory_id = r.inventory_id
WHERE r.customer_id = (
SELECT customer_id
FROM payment
GROUP BY customer_id
ORDER BY SUM(amount) DESC
LIMIT 1
);

-- 8. Clients who spent more than the average total amount spent by each client
SELECT
customer_id,
SUM(amount) AS total_amount_spent
FROM payment
GROUP BY customer_id
HAVING SUM(amount) > (
SELECT AVG(total_spent)
FROM (
SELECT
customer_id,
SUM(amount) AS total_spent
FROM payment
GROUP BY customer_id
) AS customer_totals
);