我试图为每个演员获取每部电影的前三名长度。我的查询结果是这样的。
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
我到底做错了什么?我完全糊涂了。
你不能使用列别名定义在 select
. 但是,做排名的意义不大。名称 的演员,当你能做到这一点的时候,你就可以在。id
. 如果这能满足你的需求,就把逻辑移到子查询中。
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