2013-04-11 4 views
6

나는 배열의 배열 만들 수 없습니다 :집계 배열

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

을하지만 배열을 집계 할 수없는 : 나는 무엇을 놓치고

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[] 

를?

+0

가능한 복제 http://stackoverflow.com/questions/6782268/array-agg-for-array-types – Akash

답변

15

내가 사용

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

쿼리와 같은 : 당신은 종종 단일의 입력 배열을 포장 할 것이다, 그래서 당신은, 2 차원 배열을 집계해야합니다

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

주 요소 ARRAY[array_to_aggregate] 배열 생성자.

+0

다음은 효율성에 대한 질문입니다. 이게 2 차적인 복잡성을 가진 것처럼 보입니다. – Suor

+0

@Suor'n (log n)'. 더 나은 결과를 얻으려면 언팩 된 배열을 중간 상태와 C 함수로 사용하십시오. –