SQL Query Exercise Oracle 18c - PullRequest
       1

SQL Query Exercise Oracle 18c

0 голосов
/ 31 марта 2020

Я пытаюсь решить это упражнение:

Визуализируйте актеров, которые получили более чем вдвое больше средств массовой информации своих соотечественников.

  • FILM (CODFILM, TITLE, YEAR, GENRE) - ГОД НОМЕР, он содержит только ГОД
  • ACTOR (КОДАКТОР, ИМЯ, ФАМИЛИЯ, NAZIONALITY)
  • CAST (CODFILM, CODACTOR, КОМПЕНСАЦИИ).

Я пробовал это решение, но оно не работает

SELECT CODACTOR
FROM ACTOR NATURAL JOIN CAST T
WHERE COMPENSATION >(
SELECT AVG(COMPENSATION) * 2
FROM ACTOR NATURAL JOIN CAST
WHERE NAZIONALITY = T.NAZIONALITY)

Выберите для каждого актера год, в котором он / она сыграл первую и последние фильмы, просматривая результаты в порядке убывания на основе последнего значения.

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)

Это последнее упражнение, которое я не знаю, как решить, потому что у меня нет столбца Дата рождения.

Визуализируйте роли, в которых никогда не играли французские актеры, родившиеся до 1990 года. (Предположим, что существует столбец BIRTH, введите DATE.)

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Пожалуйста, попробуйте ниже для вашего первого запроса

    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

                              )

Для вашего второго запроса, пожалуйста, попробуйте ниже

  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 
0 голосов
/ 31 марта 2020

Я думаю, вы можете попробовать это:

SELECT a.CODACTOR, count (c.*) 
FROM ACTOR a
     , CAST c 
where a.nazionality = c.nazionality 
group by a.CODACTOR having count(c.*)> 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...