database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10035 게시물 읽기
No. 10035
array + array 원소들끼리의 합? 가능한가요?
작성자
test
작성일
2019-01-23 14:42
조회수
4,034

 [1,2,3,4] + [2,3,4,5] 

했을떄 [ 3,5,7,9] 가되도록 하는 함수나 방법이 있을까요? 

이 글에 대한 댓글이 총 2건 있습니다.

없습니다. 

직접 만들어야 합니다. 

윗 경우라면, 

CREATE OR REPLACE FUNCTION public.intarray_element_plus(leftarr integer[], rightarr integer[])
 RETURNS integer[]
 LANGUAGE plpgsql
 IMMUTABLE
AS $function$
declare retarr int4[];
  maxlength int4;
  cnt int;
begin
    retarr := '{}'::int4[];
    maxlength := greatest(coalesce(array_upper(leftarr, 1),0), coalesce(array_upper(rightarr, 1),0));
    cnt := 1;

    if maxlength < 1 then
        raise exception 'could not calculate';
    end if;

    loop
        retarr := array_append(retarr, coalesce(leftarr[cnt], 0) + coalesce(rightarr[cnt], 0));
        cnt := cnt + 1;
        exit when cnt > maxlength;
    end loop;
    return retarr;
end;
$function$;
이런 형태로 간단하게 만들수는 있겠죠
 
# select intarray_element_plus('{1,2,3,4}'::int[], '{2,3,4,5}'::int[]);
 intarray_element_plus 
-----------------------
 {3,5,7,9}
 
하지만 실무에서 쓸려면, 예외처리 관련 꽤 많은 부분이 추가 되어야 할 것 같네요. 요소가 null 경우와, 각 배열의 자료형에 대한 함수 오버로드, 더하기를 했는데, 이놈이 자료형 범위 초과하는 문제, 게다가 단순 함수가 아니라, 집계함수로 사용할 예정이라면, 상황은 훨씬 복잡합니다. 
 
차근하게 공부하셔서 멋진 놈 만들어서 쓰세요.  생각보다 공부 범위가 넓습니다. 
 

 

김상기(ioseph)님이 2019-01-23 16:59에 작성한 댓글입니다.
이 댓글은 2019-01-23 17:02에 마지막으로 수정되었습니다.

-- 배열 크기가 4개 고정이라면.
SELECT x
     , y
     , CONCAT( '{'
     , CONCAT_WS( ','
       , x[1] + y[1]
       , x[2] + y[2]
       , x[3] + y[3]
       , x[4] + y[4]
       ), '}')::int[] z
 FROM (SELECT '{1,2,3,4}'::int[] x
            , '{2,3,4,5}'::int[] y
       ) a
;

마농(manon94)님이 2019-01-30 10:35에 작성한 댓글입니다.
이 댓글은 2019-01-30 10:36에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
10038PostgreSQL9.1 + Pacemaker HA 질문
신동평
2019-02-07
4177
10037PgPool Log(Level) 설정 질문 [2]
신동평
2019-01-31
4425
10036쿼리문 조언 부탁 드립니다 ㅠ [2]
김영욱
2019-01-24
4366
10035array + array 원소들끼리의 합? 가능한가요? [2]
test
2019-01-23
4034
10034pgadmin 3 에서 DB 등록이 되니 않네요 [1]
탁구공
2019-01-20
4154
10033특정 테이블의 테이블스페이스 백업 기능이 있을까요? [4]
모모와도도
2019-01-18
4066
10032혹시 운영시에 table 의 filfactor 는 몇정도로 주시나요? [1]
윤명식
2019-01-17
4002
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다