mysql - 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;
解决方案
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
s来填表actors
。我会让你构建它。
推荐阅读
- android - 包 android.support.v4.view 不存在,即使添加了依赖项
- php - 使用 Ajax 从公共目录下载 **laravel 5.4 ** 中的 Zip 文件
- mysql - mysql 5.5 命令行客户端错误 1366 HY000:不正确的字符串值:'\xD3\xE3\xC0
- python - sympy.utilities.iterables.combinations() 替换?
- java - 如何在 Spring 中配置 @Valid 上的直接字段访问?
- kdb - Q 中的大整数类型
- azure-active-directory - 通过 Azure 刀片或在 Azure AD B2C 中以编程方式编辑自定义属性的值
- kubernetes - Kubernetes 上的 Istio:pod 到服务的通信不起作用
- java - Rxjava2 阻塞订阅与订阅
- nltk - 用现在时从单词中形成句子