I’m trying to resolve this exercises:
Visualize the actors who have had more than twice the compensation of the media of their compatriots.
- FILM (CODFILM,TITLE,YEAR,GENRE) –Year is NUMBER, it contains only the Year
- ACTOR (CODACTOR,NAME,SURNAME,NAZIONALITY)
- CAST (CODFILM,CODACTOR, COMPENSATION).
I’ve tried this solution, but it doesn’t works
x
SELECT CODACTOR
FROM ACTOR NATURAL JOIN CAST T
WHERE COMPENSATION >(
SELECT AVG(COMPENSATION) * 2
FROM ACTOR NATURAL JOIN CAST
WHERE NAZIONALITY = T.NAZIONALITY)
Select, for each actor, the year in which he / she played the first and last films by viewing the results in descending order based on the latter value.
SELECT CODACTOR, MIN(YEAR), MAX(YEAR)
FROM FILM NATURAL JOIN CAST T
GROUP BY CODFILM, CODACTOR
HAVING CODACTOR IN (
SELECT CODACTOR
FROM CAST
WHERE CODFILM = T.CODFILM)
This last exercise I don’t know how to resolve because I don’t have Date Of Birth column.
Visualize the roles in which French actors born before 1990 have never played. (Suppose that exist the column BIRTH, type DATE.)
Advertisement
Answer
Please try the below for your first query
SELECT A.codactor
FROM actor A
inner join cast C
ON A.codactor = C.codactor
WHERE compensation > (SELECT trunc(Avg(compensation)) * 2
FROM actor A1
inner join cast C1
ON A1.codactor = C1.codactor
WHERE A1.nazionality = A.nazionality
)
For your second query please try the below
WITH films
AS (SELECT c.codfilm,
c.codactor,
F.title,
F.year,
F.genre
FROM film F
inner join cast c
ON c.codfilm = F.codfilm)
SELECT A.codactor,
Min(F.year) FIRST_YEAR,
Max(F.year) LAST_YEAR
FROM actor A
inner join films F
ON A.codactor = F.codactor
GROUP BY A.codactor