[SQL] 배열 인수 여러 번에 집합을 반환하는 함수를 호출
SQL배열 인수 여러 번에 집합을 반환하는 함수를 호출
이것은 여러 번 호출되는 여러 열을 반환 plpgsql 기능의 변형이다. 그러나, 나는 상황 내 특정 세트에 대한 해결책을 찾기 위해 기대했다.
I는 주어진 파라미터 행의 배열을 처리하고, 새로운 행 + 칼럼들의 세트를 리턴하는 기능을 갖는다.
CREATE OR REPLACE foo(data data[], parameter int) RETURNS SETOF enhanceddata AS
...
이 함수는 데이터의 1 세트와 테스트 케이스 작동
SELECT * FROM foo( (SELECT ARRAY_AGG(data) FROM datatable GROUP BY dataid WHERE dataid = something), 1)
하지만 기능에 dataid를 통과하지 않고는, 데이터의 여러 그룹으로 작동하게하고 싶습니다. 나는 변형의 숫자를 시도했다 :
SELECT dataid, (foo(ARRAY_AGG(data)),1).*
FROM dataset
WHERE dataid = something -- only testing on 1
GROUP BY dataid
그러나이 기능은 모든 열에 대해 한 번 호출됩니다.
해결법
-
==============================
1.포스트 그레스 9.3 년 이상, 그것은 LEFT 사실 ON ... 측면 가입 사용하는 것이 일반적으로 가장 좋습니다 :
포스트 그레스 9.3 년 이상, 그것은 LEFT 사실 ON ... 측면 가입 사용하는 것이 일반적으로 가장 좋습니다 :
SELECT sub.dataid, f.* FROM ( SELECT dataid, array_agg(data) AS arr FROM dataset WHERE dataid = something GROUP BY 1 ) sub LEFT JOIN LATERAL foo(sub.arr) f ON true;
함수 foo는 ()가 더 행을 반환 할 수없는 경우가 조인의 왼쪽에 모든 행을 보존로, 그 어떤 행이 오른쪽으로 반환되지 않습니다 경우에도 안전한 형태입니다.
그 밖에, 또는 측면 조인에서 결과없이 행을 제외 할 경우, 사용 :
CROSS JOIN LATERAL foo(sub.arr)
또는 속기 :
, foo(sub.arr)
설명서에 명시 적 언급이있다.
(다니엘에 의해 참조) 크레이그의 관련 답변은 그에 따라 업데이트됩니다 :
-
==============================
2.이 함수는하지만 때문에 FUNC (). * 구현 방법 때문이 아니라 그 입력의 맥락에서 여러 번 호출
이 함수는하지만 때문에 FUNC (). * 구현 방법 때문이 아니라 그 입력의 맥락에서 여러 번 호출
이것은에 설명되어 있습니다 : 어떻게 SQL 쿼리에서 (FUNC ()). * 구문을 사용하여 여러 기능 evals을 피하기 위해?
다음의 변형이 지원되는 모든 PostgreSQL의 버전 (8.4 이상)에 여러 evals없이 작동합니다 :
WITH subq as ( SELECT array_agg(data) as agg, dataid FROM datatable -- WHERE clause ? GROUP BY dataid) SELECT foo(agg,dataid) FROM subq;
from https://stackoverflow.com/questions/26107915/call-a-set-returning-function-with-an-array-argument-multiple-times by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 날짜 형식 기능 (0) | 2020.04.12 |
---|---|
[SQL] 하나 개의 SQL 쿼리에서 두 테이블을 병합 및 날짜 값이 고유하게 (0) | 2020.04.12 |
[SQL] MySQL은 단일 테이블은 지난 7 일을 선택하고 빈 행을 포함 (0) | 2020.04.12 |
[SQL] 그것은 특정 값에 대해 열을 쉼표로 구분을 조회 할 수 있습니까? (0) | 2020.04.12 |
[SQL] 날짜 시간 SQL에 유닉스 시간을 변환 (오라클) (0) | 2020.04.12 |