gpt4 book ai didi

mysql - sql - 对于每个 Actor , Actor 的哪部电影被租用最多以及被租用了多少次

转载 作者:行者123 更新时间:2023-11-29 17:54:31 25 4
gpt4 key购买 nike

Sakila示例数据库,如何获取每个 Actor 租用最多的电影及其数量?换句话说,如何获得关系的最高/最多出现次数及其计数?

我能够按 Actor 和电影对结果进行分组,但无法限制每个 Actor 的结果:

select concat(a.first_name, ' ', a.last_name ) as Actor, f.title as Movie, count(f.film_id) as Count
from actor as a
left join film_actor fa on a.actor_id = fa.actor_id
inner join film f on fa.film_id = f.film_id
left join inventory i on f.film_id = i.film_id
left join rental r on i.inventory_id = r.inventory_id
group by a.actor_id, f.film_id
order by a.actor_id, Count desc

phpMyAdmin 有 Sakila 演示 here

期望的结果是:

    Actor                 Movie         Rent Count
NICK WAHLBERG GOODFELLAS SALUTE 31
ED CHASE FROST HEAD 30
PENELOPE GUINESS GLEAMING JAWBREAKER 29

最佳答案

您可以使用 CTE ,然后选择与最大计数匹配的所有行(使用 ANY 谓词):

with q1 as (
select
concat(a.first_name, ' ', a.last_name ) as Actor,
f.title as Movie,
count(f.film_id) as Count
from
actor as a
left join film_actor fa on a.actor_id = fa.actor_id
inner join film f on fa.film_id = f.film_id
left join inventory i on f.film_id = i.film_id
left join rental r on i.inventory_id = r.inventory_id
group by
a.actor_id,
f.film_id
)
select * from q1
where (q1.Actor, q1.Count) = any(select q2.Actor, max(q2.Count) from q1 q2 group by q2.Actor)
order by q1.Actor

您还可以使用相关子查询来代替 ANY,因此 where 子句将是:

where q1.Count = (select max(q2.Count) from q1 q2 where q1.Actor = q2.Actor)

关于mysql - sql - 对于每个 Actor , Actor 的哪部电影被租用最多以及被租用了多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48983173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com