SQL查询返回与每个actor接触最多的actor的姓氏

问题描述 投票:0回答:1

我是sql的新手,我正在尝试编写查询以返回与每个演员合作最多的演员的姓氏。

我有3张桌子

Actor- id, first_name,last_name
Movie- id, title
Cast- pid, mid

这是我现在得到的,但是不起作用:

SELECT tt.ll
FROM Actor as AA ,Movie,Cast,(select a.id as idd, a.first_name,a.last_name as ll, count(*)
from Actor a
join Cast c on c.pid = a.id
where mid in (select mid from Cast where pid = AA.id) 
and pid <> AA.id 
group by a.id
order by count(*) desc, a.last_name ASC limit 1) tt
WHERE pid=AA.id AND Cast.mid=Movie.id 
group by AA.id;
mysql sql database video
1个回答
0
投票

您可以在cast或相关子查询上获得成对的参与者与自我联接一起工作的次数:

select c.aid, c2.aid, count(*)
from cast c join
     cast c2
     on c.mid = c2.mid   -- same movie
group by c.aid, c2.aid

要在第一列中充分利用每个演员,请使用窗口函数:

select aa.*
from (select c.aid, c2.aid as aid_2, count(*) as cnt,
             row_number() over (partition by c.aid order by count(*) desc) as seqnum
      from cast c join
           cast c2
           on c.mid = c2.mid   -- same movie
      group by c.aid, c2.aid
     ) aa
where seqnum = 1;

然后填充影片,您可以在join表中使用两个actors。我让你构造它。

© www.soinside.com 2019 - 2024. All rights reserved.