Вы должны присоединиться к 3 таблицам: Actor
, ActorMovie
и Movie
. Затем group by
actor и задайте условие в предложении having
:
select a.name
from Actor a
inner join ActorMovie am on am.a_name = a.name
inner join Movie m on m.title = am.m_title
group by a.name
having count(case when m.genre = 'comedy' then 1 end) >
count(case when m.genre in ('drama', 'tragedy') then 1 end)
Можно также записать условие Имеющий:
having sum(case when m.genre = 'comedy' then 1 else 0 end) >
sum(case when m.genre in ('drama', 'tragedy') then 1 else 0 end)
или в базах данных, таких как MySql и SQLite:
having sum(m.genre = 'comedy') >
sum(m.genre in ('drama', 'tragedy'))
Вы также можете использовать этот запрос:
select am.name
from ActorMovie am inner join Movie m
on m.title = am.m_title
group by am.name
having count(case when m.genre = 'comedy' then 1 end) >
count(case when m.genre in ('drama', 'tragedy') then 1 end)
, в котором таблица Actor
не участвует, поэтому вы объединяете только 2 таблицы, потому что имя актера находится в таблице ActorMovie
.