2017-06-05 57 views
1

我需要乘以2個數組中的每個元素並投影一個數組,其中每個元素是產品結果。2個數組中相同索引的元素的產品

例子:

select * from vetor_query; 

返回:

query_id |pesos                        | 
---------|----------------------------------------------------------------------------------------------------| 
1  |{2.0000,0.4150,2.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000} | 

和查詢:

select * from vetor_documento; 

返回:

doc |pesos                        | 
-------|----------------------------------------------------------------------------------------------------| 
d1.txt |{3.0000,0.8301,4.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000} | 
d2.txt |{2.0000,0.0000,0.0000,0.0000,2.0000,2.0000,2.0000,2.0000,2.0000,0.0000,0.0000,0.0000,0.0000,0.0000} | 
d3.txt |{0.0000,1.0729,0.0000,0.0000,0.0000,0.0000,2.0000,1.0000,0.0000,2.0000,2.0000,0.0000,0.0000,0.0000} | 
d4.txt |{0.0000,1.0729,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,5.1699,4.0000,4.0000} | 

我需要結合兩個查詢(交叉連接),並生成內部產品的每個docquery_id的結果數組。

我第一次嘗試這樣一條:

select vq.query_id, vd.doc, unnest(vq.pesos) * unnest(vd.pesos) 
from vetor_query vq 
cross join vetor_documento vd; 

然而,它產生這樣的錯誤:

Functions and operators can take at most one set argument

回答

0

可以使用unnest()功能的方便的功能並行UNNEST多個陣列。

做,在一個LATERAL加入,每乘結果行和飼料,爲數組構造:

SELECT q.query_id, d.doc, qd.prod 
FROM vetor_query   q 
CROSS JOIN vetor_documento d 
CROSS JOIN LATERAL (
    SELECT ARRAY(SELECT x*y FROM unnest(q.pesos, d.pesos) t(x, y)) AS prod 
    ) qd; 

這是假設所有的數組的長度相同,否則多餘的元素都充滿了NULL。

相關:

所得數組中的順序對應於元素的原始順序。但考慮:

相關問題