Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在postgresql中重用表达式的别名_Sql_Postgresql - Fatal编程技术网

在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或子查询。