Каково среднее значение year_max - year_min в этих таблицах sql?

У меня есть 3 таблицы: актеры, фильмы и актеры:

mysql> desc actors;

+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int          | NO   | PRI | 0       |       |
| full_name | varchar(200) | YES  |     | NULL    |       |
| gender    | varchar(1)   | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

mysql> desc movies;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | NO   | PRI | 0       |       |
| title | varchar(100) | YES  |     | NULL    |       |
| year  | int          | YES  |     | NULL    |       |
| genre | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

а также

mysql> desc cast;
+----------+------+------+-----+---------+-------+
| Field    | Type | Null | Key | Default | Extra |
+----------+------+------+-----+---------+-------+
| actor_id | int  | YES  | MUL | NULL    |       |
| movie_id | int  | YES  | MUL | NULL    |       |
| salary   | int  | YES  |     | NULL    |       |
+----------+------+------+-----+---------+-------+

Связь между таблицами: cast.movie_id = movies.id and actors.id = cast.actor_id

Вопрос: какова средняя продолжительность карьеры (годы между первым фильмом и последним фильмом) актеров, которые за свою карьеру снялись как минимум в пяти фильмах?

Я попытался перечислить актеров по количеству фильмов, в которых они принимали участие:

mysql> select full_name, count(title) as movie_title from cast, actors, movies
    -> where cast.movie_id = movies.id and actors.id = cast.actor_id
    -> group by full_name
    -> order by movie_title
    -> desc limit 2;

+--------------------------+-------------+
| full_name                | movie_title |
+--------------------------+-------------+
| Kevin Bacon              |           9 |
| Bill Paxton              |           3 |

... Если то, что я сделал правильно (не уверен), у нас есть только один такой актер, поэтому вопрос будет заключаться в том, как найти этот диапазон

Буду очень благодарен за любой совет!


person Mariia    schedule 22.02.2020    source источник
comment
MAX(year) - MIN(year) расскажет о карьерном долголетии   -  person Barmar    schedule 22.02.2020
comment
Вы должны научиться использовать ANSI JOIN вместо перекрестных продуктов.   -  person Barmar    schedule 22.02.2020
comment
попробовал это: mysql> выберите full_name, max (год) - min (год) как dis, подсчитайте (название) как movie_title из актеров, актеров, фильмов ->, где cast.movie_id = Movies.id и Actors.id = cast.actor_id -› сгруппировать по полному_названию -› упорядочить по названию фильма -› ограничение по убыванию 2;   -  person Mariia    schedule 22.02.2020
comment
Добро пожаловать в Stack Overflow и поздравляем с публикацией вашего первого вопроса. В будущем вы, вероятно, обнаружите, что люди будут отвечать быстрее и менее агрессивно, если вам удастся сделать свои вопросы немного короче.   -  person nurdglaw    schedule 22.02.2020


Ответы (1)


Как насчет:

SELECT AVG(YearsActive) TotalAverage
FROM (
-- by actor
         SELECT a.id                        AS ActorId,
--      GROUP_CONCAT(a.full_name) AS ActorName,
                (MAX(m.year) - MIN(m.year)) AS YearsActive
         FROM actors a
                  INNER JOIN cast c ON a.id = c.actor_id
                  INNER JOIN movies m ON c.movie_id = m.id
         GROUP BY a.id
         HAVING COUNT(0) >= 5
     ) B
;
person Nae    schedule 22.02.2020