2010-06-10 6 views
0

La requête suivante ne fonctionnera pas, mais il devrait être clair ce que j'essaie de faire: diviser la valeur de 't' sur l'espace et utiliser le dernier élément de ce tableau dans la sous-requête (comme cela va correspondre tl). Des idees pour faire cela? Merci!postgres sous-requête w/colonne dérivée

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; 

Répondre

0

Je ne pense pas que vous pouvez vous un index négatif pour référencer un élément de tableau dans postgresql (documentation)?

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) 

Je trouve étrange que cela ne donne pas une erreur, mais ...

La manière correcte serait:

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

Aussi, voir ici:

Getting the last word from a Postgres string, declaratively

+1

"De même, null est renvoyé si un indice est en dehors des limites du tableau (ce cas ne génère pas d'erreur)." (un [extrait] (http://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-ACCESSING) des docs). –

+0

+1 J'avais raté ça. Je me suis interrogé sur les index négatifs, qui à première vue seraient intrinsèquement invalides. Mais ils ne le sont pas, car postgresql autorise des index inférieurs arbitraires dans la déclaration de tableau. Et je vois que Postgresql ne donne pas d'erreur même lorsque les dimensions sont incompatibles. – leonbloy