在PostgreSQL中重复使用表达式的别名

3
我正在尝试做这件事:
select first_name || ' ' || last_name as full_name, Length(full_name) as len from customer order by len

这是不可能的;

"full_name"列不存在

因此,我必须这样做:

select first_name || ' ' || last_name as full_name, Length(first_name || ' ' || last_name) as len from customer order by len

这是否意味着SQL引擎必须两次计算表达式'first_name || ' ' || last_name'?

1个回答

3

正如您所观察到的,您想要做的事情是不可能的。相反,您可以使用横向连接在FROM子句中计算值:

select v.full_name, Length(v.full_name) as len
from customer c cross join lateral
     (values (first_name || ' ' || last_name)
     ) v(full_name)
order by len;

这是否意味着我们不能将别名传递给functions()函数? - undefined
@Mandroid...不,这意味着你不能在同一个select(或where)中重复使用别名。你也可以使用CTE或子查询。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接