首页 > 解决方案 > SQL查询返回与每个演员合作最多的演员的姓氏

问题描述

我是 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;

标签: mysqlsqldatabasevideo

解决方案


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;

然后要填电影,可以用两个joins来填表actors。我会让你构建它。


推荐阅读