如何找到演过最多电影的演员和第三繁忙的演员
Posted
技术标签:
【中文标题】如何找到演过最多电影的演员和第三繁忙的演员【英文标题】:How to find the actor who has acted in the maximum number of movie and 3rd busiest actor 【发布时间】:2020-06-21 08:54:36 【问题描述】:有两张桌子
表 1 - ACTOR:ACTOR_ID、FIRST_NAME、LAST_NAME、LAST_UPDATE
表 2 - FILM_ACTOR:ACTOR_ID、FILM_ID、LAST_UPDATE
我已经尝试了以下方法来查找谁在最大数量的电影中表演
select top 1 concat(ACTOR.FIRST_NAME, ACTOR.LAST_NAME) as Full_name
from ACTOR
left join FILM_ACTOR on ACTOR.ACTOR_ID = FILM_ACTOR.ACTOR_ID
group by FILM_ACTOR.ACTOR_ID
order by Full_name desc;
【问题讨论】:
请看:Why should I provide an MCRE for what seems to me to be a very simple SQL query? 请说明您使用的是哪个 RDBMSmysql
SQL Server
所以,不要标记不相关的标签。
sql server 中没有 varchar2 这样的东西。并且时间戳数据类型与日期或时间无关。所以这可能与 SQL Server 无关。
是的,这似乎是关于 Oracle
【参考方案1】:
我尝试了以下方法来找出谁在最大数量的电影中表演过。
您的原始查询非常接近 - 您只需要正确的 order by 子句:
select top (1) concat(a.first_name, a.last_name) as full_name
from actor a
left join film_actor fa on a.actor_id = fa.actor_id
group by a.actor_id, a.first_name, a.last_name
order by count(*) desc;
如果您想要第 nth 个最繁忙的演员,那么一种选择是使用窗口函数:
select full_name
from (
select concat(a.first_name, a.last_name) as full_name, row_number() over(order by count(*) desc) rn
from actor a
left join film_actor fa on a.actor_id = fa.actor_id
group by a.actor_id, a.first_name, a.last_name
) t
where rn = 3
【讨论】:
【参考方案2】:你可以做聚合: :
select a.*
from actor a
where a.actor_id = (select top (1) fm.actor_id
from film_actor fm
group by fm.actor_id
order by count(*) desc
);
【讨论】:
以上是关于如何找到演过最多电影的演员和第三繁忙的演员的主要内容,如果未能解决你的问题,请参考以下文章
数据库关系代数:如何找到在“环球影城”制作的所有电影中扮演过角色的演员?
如何在 MySQL 中显示一个表中的所有行并从另一个表中计数