Подзапрос с предложением WHERE => Столбец не существует - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь получить 3 лучших фильма для каждого актера. Мой запрос выглядит как this.

SELECT fullname, 
   ROW_NUMBER() OVER (PARTITION BY fullname ORDER BY length DESC) as f_rank,
   length
      FROM
   (SELECT actor.first_name || ' ' || actor.last_name as fullname, film.length
   FROM film_actor
   JOIN film
      ON film_actor.film_id = film.film_id
   JOIN actor
      ON film_actor.actor_id = actor.actor_id) sub
WHERE f_rank <= 3

Так что выглядит без предложения where

fullname    f_rank  length
Adam Grant  1   173
Adam Grant  2   173
Adam Grant  3   156
Adam Grant  4   155
Adam Grant  5   152
Adam Grant  6   148
Adam Grant  7   141

WHERE fullname = 'Alan Grant' работает отлично. С f_rank я получаю следующую ошибку:

column "f_rank" does not exist

Что я здесь не так делаю? Я в полном замешательстве.

1 Ответ

1 голос
/ 02 мая 2020

Нельзя использовать псевдоним столбца, определенный в select. Но не имеет смысла ранжировать на имя актера, когда вы можете сделать это на id. Если это соответствует вашим потребностям, просто переместите лог c в подзапрос:

SELECT fullname, f_rank, length
FROM (SELECT a.first_name || ' ' || a.last_name as fullname, f.length,
             ROW_NUMBER() OVER (PARTITION BY a.actor_id ORDER BY f.length DESC) as f_rank
      FROM film_actor fa JOIn
           film f
           ON fa.film_id = f.film_id JOIN
           actor a
           ON fa.actor_id = a.actor_id
     ) af
WHERE f_rank <= 3
...