У меня есть следующая таблица Фильмы:
id | title | year
315 Harry Potter and the Deathly Hallows: Part 2 2011
407 Cinderella 2015
826 The Shape of Water 2017
799 Enchanted 2007
523 How to Train Your Dragon 2010
618 Crazy Rich Asians 2018
и таблица Жанры:
movie_id | genre
315 adventure
315 fantasy
315 mystery
315 drama
407 drama
407 fantasy
826 drama
826 thriller
826 adventure
826 horror
799 fantasy
799 comedy
799 romance
523 drama
523 fantasy
618 romance
618 comedy
и ключевое слово таблицы:
movie_id | keyword
315 magic
315 wizards
315 witch
315 friendship
315 abuse
407 prince
407 fairy tale
407 magic
407 poor girl
407 abuse
826 scientist
826 mute
826 friendship
799 musical
799 magic
799 witch
799 friendship
523 viking
523 boy
523 fire
618 singapore
618 wedding
618 money
Я пытаюсьпостроить запрос, который выводит все фильмы, которые имеют общие жанры для данного фильма.Если есть фильмы, которые имеют одинаковое количество общих жанров, то я хочу ранжировать эти фильмы по порядку максимальных общих ключевых слов.
Например, если фильм был «Гарри Поттер и Дары смерти: Часть 2», тогда результат запроса будет:
title | genre_frequency | keyword_frequency
Cinderella 2 2
The Shape of Water 2 1
How to Train Your Dragon 2 0
Enchanted 1 3
Фильмы, у которых нет жанров, общих для указанного фильма, не включаются в вывод (например, Crazy Rich Asians).
У меня есть два запроса, которые могут дать мне genre_frequency и keyword_frequency.
select m.*, genre_frequency from movie m
join (
select m.id, count(*) as genre_frequency
from movie m
join genre g on m.id=g.movie_id
where g.genre in (select g1.genre
from genre g1
where g1.movie_id=315)
group by m.id
) f
on m.id=f.id
where m <> 315
order by f.genre_frequency desc;
select m.*, keyword_frequency from movie m
join (
select m.id, count(*) as keyword_frequency
from movie m
join keyword k on m.id=k.movie_id
where k.keyword in (select k1.keyword
from keyword k1
where k1.movie_id=315)
group by m.id
) f
on m.id=f.id
where m <> 315
order by f.keyword_frequency desc;
Проблема в том, что я хочу объединить два вышеупомянутых запроса в один запрос, чтобы я мог получить выходную таблицу, как показано выше.Я не уверен, как я могу это сделать.Любые идеи приветствуются.