2017-12-04 4 views
-1

왼쪽 결합 조인을 사용하는 2 개 이상의 테이블의 결과를 postgresql에서 쿼리하려고하는데 테이블 entidad_a_ (주 테이블)의 각 레코드에 대해 하나의 레코드가 있어야합니다.) 그리고 테이블 entidad_b_의 모든 레코드는 array_agg에 의해 생성 된 하나의 필드에 포함되어야합니다. 이 배열에서는 중복 요소를 삭제해야하며 주 테이블의 순서 배열을 보존해야합니다.Postgresql : array_agg DISTINCT 및 ORDER

SELECT entidad_a_._id_ AS "_id", CASE WHEN count(entidadB) > 0 THEN array_agg(DISTINCT entidadB._id,ordinality order by ordinality) 
ELSE NULL END AS "entidadB" 
FROM entidad_a_ as entidad_a_, unnest(entidad_a_.entidad_b_) WITH ORDINALITY AS u(entidadb_id, ordinality) 
LEFT JOIN LATERAL (
SELECT entidad_b_3._id_ AS "_id", entidad_b_3.label_ AS "label" 
FROM entidad_b_ as entidad_b_3 
WHERE entidad_b_3._id_ = entidadb_id 
GROUP BY entidad_b_3._id_ 
LIMIT 1000 OFFSET 0 
) entidadB ON TRUE 
GROUP BY entidad_a_._id_ 
LIMIT 1000 OFFSET 0 

하지만 오류 .... 가 어떻게 이러한 결과를 가질 수있다 : 나는이 SQL 쿼리를 실행해야합니까? 미리 감사드립니다.

편집 : 내 오류는 다음과 같습니다 오류 : 함수 array_agg (정수, BIGINT)는 SQL 상태가 존재하지 않습니다 : 42883 힌트 : 어떤 함수는 주어진 이름과 인수 유형과 일치하지 않습니다. 명시 적 타입 캐스트를 추가해야 할 수도 있습니다. 문자 : 69

쿼리 인 경우 : ...... array_agg (에 순서에 의해 DISTINCT entidadB._id 순서) ..... eror은 다음과 같습니다 오류 : DISTINCT, ORDER와 집계에 식에 의해 인수 목록에서 SQL 상태를 표시해야합니다 42P10 문자 : (110)

내 문제가

+0

그리고 무엇이 오류입니까? ** ** [** 편집] ** 질문에 오류 메시지를 추가하십시오 ** ** 게시물 코드 또는 의견에 추가 정보가 없습니다. –

+0

오류 메시지에 대해 이해하지 못하는 점은 무엇입니까? 특정 이름없이 인터넷 검색을하고 제목을 검색하는 방법에 대해 어떻게 알게 되었습니까? 왜 일을하지 않았습니까? 논쟁과 함께 별개의 명령을 사용하지 않는 이유는 무엇입니까? – philipxy

+0

별개의 & 주문을 함께 사용하는 것에 대한 설명과 예를 들어 주시겠습니까? array_agg와 함께 사용하여 오류를 obtaing 해요. 이제 사용자 지정 집계 함수를 만들려고합니다. –

답변

0

해결하여 array_agg, DISTINCT와 ORDER의 조합입니다! 사용자 정의 집계가있는 postgres 확장을 만들었습니다.

CREATE AGGREGATE array_agg_dist (anyelement) 
(
    sfunc = array_agg_transfn_dist, 
    stype = internal, 
    finalfunc = array_agg_finalfn_dist, 
    finalfunc_extra 
); 

이 사용자 지정 기능에 대한 함수와 C 코드 만들기.