子查询WHERE子句=> 列不存在。

问题描述 投票:0回答:1

我试图为每个演员获取每部电影的前三名长度。我的查询结果是这样的。

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

我到底做错了什么?我完全糊涂了。

sql postgresql where-clause
1个回答
1
投票

你不能使用列别名定义在 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
© www.soinside.com 2019 - 2024. All rights reserved.