개발공작소
article thumbnail
728x90

오늘은 Postgres에서 지원하는 기본적인 배열함수를 알아보자.

물론 툴은 DBeaver를 사용 할 것이고, 웹로그 테이블을 테스트 테이블로 사용한다.

 

1. array_agg

2. array_to_string, string_to_array

3. unnest

 

이렇게 3개의 함수를 지원한다. 그럼 바로 하나하나 알아보자.

 

1. array_agg

============================================================================

 

array_agg는 여러 row를 하나의 배열로 만들고자 할 때 사용하는 함수이다. inner조인으로 가져온 row값들은

보통 각각 다른 행으로 이루어 진다.

행이 나뉘어짐.

하지만 가져온 행값을 하나의 배열로 사용해야 할 때가 있다.

예를 들면 any함수를 통해 배열로 포함여부를 확인해야 할때.. ( 물론 사람마다 다르지만, 나는 주로 이렇게 사용했다.. )

 

사용법 

SELECT array_agg(array로 변환 할 row) from 테이블;

 

아래는 실제 SELECT문 예시

array_agg 함수 사용

 

자 이렇게 보면, 5개의 행이었던게 하나의 행이 되었고 각 행값이 배열로 들어갔다. 물론 배열 안의 값도 5개이다.

array_agg() 함수는 GROUP BY와 함께 쓰면 예쁘게 값을 추출 할 수 있다. 아래를 보자.

 

 

array_agg함수 및 group by 사용

아이디를 GROUP으로 묶어서 각 웹로그ID를 array_agg함수를 이용하여 예쁘게 묶었다. 이렇게 배열로 가져온 값을

any를 통하여 포함여부를 비교한다던가, 이대로 화면까지 가져가 각 사용자의 로그인 정보를 목록으로 뿌려주는 등의

기능도 구현할 수 있을 것 같다.

 

 

2. array_to_string, string_to_array

============================================================================

array_agg함수와 같지만, 결과값은 배열이 아닌 문자열이다. 따로 설명은 하지 않고 바로 예제를 보자.

 

사용법

SELECT array_to_string(string으로 변환 할 배열, 구분자 ) from 테이블;

 

array_to_string 샘플1

조금 복잡하지만, 설명하자면 이렇다. array_to_string함수는 이름 그대로 배열을 함수로 바꿔주는 함수이다.

그런데 COMTNWEBLOG테이블의 REQUST_ID는 배열이 아니기 때문에, array_agg함수를 통해 배열로 우선 변환

해준 뒤, array_to_string함수로 감싸주어서 문자열로 만들어 준다.

그리고 구분자를 넣어준다. 보통 쉼표(,)로 많이 넣어주기 때문에 쉼표(,)를 구분자로 넣어주었다.

결과값을 자세히 보면 데이터 타입이 ABC즉 문자열인 걸 알 수 있고, 또한 쉼표(,)로 구분 되어 있는 걸 알 수 있다.

 

만약 행값이 이미 배열이라면 array_agg함수를 통해 굳이 배열로 안바꾸고 바로 사용해도 된다~

아 물론 이거랑은 또 반대 되는 개념인 string_to_array도 있다.

문자열을 배열로 바꿔주는 것.. 사용법은 array_to_string와 같이

SELECT string_to_array(배열로 변환 할 문자열, 구분자 ) from 테이블;

처럼 입력하면 된다. 바로 예제를 보자.

 

자.. 더럽긴 하지만, array_to_string함수로 문자열로 만든 행값을 다시 string_to_array함수로 감싸서 배열로 만들어

주고 있다.

자세히 보면 배열로 변환 되었다. 이렇게 필요한 상황에 맞게 배열로 또는 문자열로, 또 배열로 변환해가면서 사용하면 될 것 같다.

 

3. unnest

============================================================================

unnest함수는 배열 데이터를 풀어서 행값으로 만든다. 예를 들면 배열데이터가 있고 배열안에 5개의 데이터가 있다고

하자. 그럼 5개의 행을 리턴해주는 것이다.

 

사용법 

SELECT unnest( 행으로 변환 할 배열 ) FROM 테이블;

 

unnest함수 샘플

결과를 보면 배열값을 unnest함수로 감싸주니, 배열이 각 행으로 돌아간 것을 확인할 수 있다.

주의 할 점은 sum() 등의 통계함수를 같이 이용 할 경우, array의 개수만큼 값이 중복 되어 나올 수 있으므로 

주의가 필요하다.

 

 

오늘은 이렇게 postgres에서 지원하는 배열관련 함수를 알아보았다. 다음에는 postgres 내에서 

값을 비교하는 방법에 대해 알아보자. 보통 like나 = 를 자주 사용하는데,

각 배열간 비교라던가, 배열에 포함이 되어 있는지 여부는 Postgres에서는 any 라는 녀석을 이용해야 하는 경우가

있기 때문이다. 끝.

728x90
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!