在postgresql中重用表达式的别名
我正在尝试这样做:在postgresql中重用表达式的别名,sql,postgresql,Sql,Postgresql,我正在尝试这样做: select first_name || ' ' || last_name as full_name, Length(full_name) as len from customer order by len select first_name || ' ' || last_name as full_name, Length(first_name || ' ' || last_name) as len from customer order by len 这是不可能的 “全
select first_name || ' ' || last_name as full_name, Length(full_name) as len from customer order by len
select first_name || ' ' || last_name as full_name, Length(first_name || ' ' || last_name) as len from customer order by len
这是不可能的
“全名”列不存在
因此,我必须这样做:
select first_name || ' ' || last_name as full_name, Length(full_name) as len from customer order by len
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”两次?正如您所观察到的,您想要做的是不可能的。相反,您可以使用横向连接来计算
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;
这是否意味着我们不能将别名传递给函数()?@Mandroid。否,这意味着您不能在定义别名的同一
选择
(或其中
)中重复使用别名。您也可以使用CTE或子查询。