Как найти актера, сыгравшего максимальное количество мов ie и 3-го самого загруженного актера - PullRequest
0 голосов
/ 09 марта 2020

Получил 2 таблицы

enter image description here

Таблица 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;

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Я пробовал ниже при поиске, кто действовал в максимальном количестве фильмов.

Ваш исходный запрос довольно близок - вам просто нужен правильный порядок по выражению:

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
1 голос
/ 09 марта 2020

Вы можете сделать агрегацию::

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
                   );
...