2013-04-11 9 views
6

mogę utworzyć tablicę tablic:Nie można kruszywa tablice

select array[array[1, 2], array[3, 4]]; 
    array  
--------------- 
{{1,2},{3,4}} 

Ale nie mogę agregowane tablice:

select array_agg(array[c1, c2]) 
from (
    values (1, 2), (3, 4) 
) s(c1, c2); 
ERROR: could not find array type for data type integer[] 

Czego mi brakuje?

+0

Możliwy duplikat http://stackoverflow.com/questions/6782268/array-agg-for-array-types – Akash

Odpowiedz

15

używam:

CREATE AGGREGATE array_agg_mult(anyarray) (
    SFUNC = array_cat, 
    STYPE = anyarray, 
    INITCOND = '{}' 
); 

i zapytań jak:

SELECT array_agg_mult(ARRAY[[x,x]]) FROM generate_series(1,10) x; 

Pamiętaj, że musisz agregowania tablice 2-wymiarowe, więc będziesz często chcą zawijać tablicę wejścia w jedno- element ARRAY[array_to_aggregate] konstruktor tablicowy.

+0

Tutaj chodzi o efektywność. Wygląda na to, że wil ma kwadratową złożoność. – Suor

+0

@Suor 'n (log n)' prawdopodobnie. Aby uzyskać lepsze wyniki, używałbyś rozpakowanej tablicy jako stanu pośredniego i funkcji C. –

Powiązane problemy