Sql 带派生列的postgres子查询

Sql 带派生列的postgres子查询,sql,postgresql,Sql,Postgresql,下面的查询将不起作用,但应该清楚我试图做什么:在空间上拆分't'的值,并在子查询中使用该数组中的最后一个元素,因为它将匹配tl。有什么办法吗?谢谢 SELECT t, y, "type", regexp_split_to_array(t, ' ') as t_array, sum(dr), ( select uz from f.tfa where tl = t_array[-1] ) as uz, sc FROM padres.yd_fld WHERE y = 2010 AND pos &l

下面的查询将不起作用,但应该清楚我试图做什么:在空间上拆分't'的值,并在子查询中使用该数组中的最后一个元素,因为它将匹配tl。有什么办法吗?谢谢

SELECT t, y, "type",
regexp_split_to_array(t, ' ') as t_array, sum(dr), (

select uz from f.tfa where tl = t_array[-1]

)
as uz,
sc
FROM padres.yd_fld
WHERE y = 2010 AND pos <> 0
GROUP BY t, y, "type", sc;

我认为您不能在postgresql文档中使用负索引来引用数组元素吗

test=# select t from 
      (select regexp_split_to_array('hi man bye', ' ') as t) as x;       
--------------
 {hi,man,bye}
(1 row)

test=# select t[1] from 
      (select regexp_split_to_array('hi man bye', ' ') as t) as x;
 t
----
 hi
(1 row)

test=# select t[-1] from 
      (select regexp_split_to_array('hi man bye', ' ') as t) as x;
 t
---

(1 row)
我觉得奇怪,它没有给出一个错误,虽然

正确的方法是:

test=# select t[array_length(t,1)] from 
  (select regexp_split_to_array('hi man bye', ' ') as t) as x;
  t
-----
 bye
此外,请参见此处:


此外,如果下标超出数组边界,则返回null。这种情况不会引发错误。一份文件中的一份。+1我错过了。我想知道负指数,一开始认为它本质上是无效的。但事实并非如此,因为postgresql允许在数组声明中使用任意较低的索引。我发现Postgresql即使在维度不兼容的情况下也不会给出错误。