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

标签 mysql sql

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/

相关文章:

php - 按年龄搜索用户。如何计算正确的确定年龄?

php - 小数保护php mysql

即使不提供密码也能登录Mysql

SQL Server 2014 - 模拟和 CTE 循环

php - 计算单词的所有实例并存储在变量中

mysql - 从表中获取用户的最高分

mysql - 存储过程计数麻烦

php - 批处理未插入到表中

sql - SQL中如何从不相关的表中获取引用值

php - 评估数学表达式