2017-10-20 210 views
2

使用Postgres 9.5,我想concontern從GROUP BY整數數組。從文檔似乎array_agg應該能夠做到這一點,但我得到:ERROR: cannot accumulate arrays of different dimensionalityPostgreSQL array_agg(INTEGER [])

在我的測試集上使用array_dims我得到[1:18],[1:24]和[1:48]。我將其看作3個不同長度的1維數組。結果應該是維數爲[1-90]的單個數組我在這裏錯過了什麼?

+0

IIRC ARRAY_AGG用於分組的值連接成一個單一的陣列,而不是來連接陣列。 – Magisch

+0

array_agg將行聚集到數組中 - 例如'select array_agg(oid)from pg_database' –

+0

array_agg試圖做這個'array [array [1:18],array [1:24],array [1:48]]'並且這不是有效的多維數組。你需要編寫你自己的聚合,而不是連接數組。 –

回答

3

繼續在評論中討論,我個人的建議是創建聚合。

CREATE AGGREGATE array_concat_agg(anyarray) (
    SFUNC = array_cat, 
    STYPE = anyarray 
); 

然後就可以做到這一點:

SELECT column1 
    FROM (VALUES (array[1,2,3]), (array[3,4]), (array[53,43,33,22])) arr; 
    column1 
--------------- 
{1,2,3} 
{3,4} 
{53,43,33,22} 
(3 rows) 

SELECT array_concat_agg(column1) 
    FROM (VALUES (array[1,2,3]), (array[3,4]), (array[53,43,33,22])) arr; 
    array_concat_agg 
------------------------- 
{1,2,3,3,4,53,43,33,22} 
(1 row) 
+0

謝謝。這很簡單,我想知道爲什麼這不是一個標準函數。 – Derek