Среднее количество жанров на фильм для MySQL

0

Наткнулся на проблему с использованием набора данных 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; 

Любые идеи о том, как вы будете интерпретировать вопрос и ответ?

  • 0
    Используйте правильную GROUP BY . Ваш запрос не должен даже выполняться.
Теги:
count

2 ответа

2

Ну, я бы начал с количества жанров на фильм:

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;
  • 0
    Разве наличие двух операторов Select не кажется здесь чрезмерным?
  • 1
    @ Райан. , , Похоже, чтобы решить проблему. Он может использовать оконную функцию вместо MySQL 8+.
0

Я согласен с Гордоном по первому количеству жанров на фильм

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
  • 0
    , , «для каждого жанра».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню