Наткнулся на проблему с использованием набора данных IMBd, на который я не могу найти ответ. Вопрос в том:
Создайте таблицу, которая содержит среднее количество жанров на фильм для каждого жанра
У нас есть две таблицы: фильмы: идентификатор, имя; Жанры: id (movieId), жанр
Фильмы:
id,name
1,Toy Story
2,Jumanji
3,Grumpier Old Men
4,Waiting to Exhale
5,Father of the Bride Part II
6,Heat
Жанры:
id,genre
1,Animation
1,Children's
1,Comedy
2,Adventure
2,Children's
2,Fantasy
3,Comedy
3,Romance
4,Comedy
4,Drama
5,Comedy
6,Action
6,Crime
6,Thriller
Возможно, я неверно истолковал вопрос, но разве не должно быть 3 столбца: жанр, фильм и количество?
Мой ответ будет начинаться следующим образом:
SELECT genre, name, AVG(COUNT(*)) FROM movies
JOIN genres ON genres.id=movies.id
GROUP BY name;
Любые идеи о том, как вы будете интерпретировать вопрос и ответ?
Ну, я бы начал с количества жанров на фильм:
select id, count(*) as num_genres
from genres g
group by id
Затем я бы "приложил" эту информацию к жанрам информации. И совокупный и средний:
select g.genre, avg(m.num_genres)
from genres g join
(select id, count(*) as num_genres
from genres g
group by id
) m
on g.id = m.id
group by g.genre;
Я согласен с Гордоном по первому количеству жанров на фильм
select id, count(*) as num_genres
from genres g
group by id
Но среднее количество жанров на фильмы должно быть
SELECT AVG(num_generes)
FROM (
SELECT id, count(*) as num_genres
FROM genres g
GROUP BY id
) t
GROUP BY
. Ваш запрос не должен даже выполняться.