Sql WHERE子句=>列的子查询不存在
我试图为每一位演员获得每部电影前三名的长度。我的问题看起来像是我的问题Sql WHERE子句=>列的子查询不存在,sql,postgresql,where-clause,Sql,Postgresql,Where Clause,我试图为每一位演员获得每部电影前三名的长度。我的问题看起来像是我的问题 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
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
其中fullname='Alan Grant'非常有效。对于f_秩,我得到以下错误:
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
在“选择”中定义的列别名不能在该选择的“位置”中引用。使用CTE或子查询。从。。。选择WHERE-SELECT中定义的列不能用于同一级别的WHERE
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