2월 02, 2024

[PostgreSQL] 데이터를 배열로 나열하기, 배열을 string으로 변경 (ARRAY_AGG, ARRAY_TO_STRING 사용법)

PostgreSQL에서 데이터를 배열로 나열하는 방법에 대하여 알아보자. 단순히 배열을 만들 때 유용할 뿐만 아니라 group by를 사용하는데 max와 min을 쓰고 싶지 않은 경우에도 유용하게 사용할 수 있다. 


크게 사용할 수 있는 문법은 두 가지가 있다. 

1. ARRAY_AGG

이전 포스팅과 동일하게 위의 사원 정보를 담고 있는 사원 테이블이 있다고 가정해보자. 


여기서 2024년도 입사, 즉 사번이 2024로 시작하는 사원들의 이름을 배열로 받고 싶을 경우에는 어떻게 SQL을 작성하면 될까? 


SELECT 

ARRAY_AGG(EMP_NM)

FROM 

사원테이블

WHERE EMP_NO like '2024%';


위와 같이 작성하면 된다. 


결과값은 

{John,Tom}

이렇게 나올 것이고 중괄호가 쳐져 있는 배열 형태로 return이 된다. array 형태이기 때문에 string 형태로 받고 싶을 때 사용하는 것이 두 번째 방법이다.


2. ARRAY_TO_STRING

위에서는 {John,Tom} 이런 식의 array 형태로 출력이 되었는데 이를 중괄호가 없어진 string 형태로 원할 때 사용할 수 있는 것이 ARRAY_TO_STRING이다. 


SELECT 

ARRAY_TO_STRING(ARRAY_AGG(EMP_NM), ',')

FROM 

사원테이블

WHERE EMP_NO like '2024%';


이런 식으로 SQL을 작성해주면 

John,Tom

이라고 String 형태로 출력이 될 것이다. 


ARRAY_TO_STRING의 경우 첫 번째 인자로는 array 인자를, 두 번쨰 인자로는 배열을 구분지을 구분자를 넣어주면 된다.


여기서는 배열의 각 항목을 ',' 쉼표로 구분하여 string을 만들어주겠다는 뜻이다. 


SELECT 

ARRAY_TO_STRING(ARRAY_AGG(EMP_NM), ' ; ')

FROM 

사원테이블

WHERE EMP_NO like '2024%';


위와 같이 ; 로 구분을 하여

John ; Tom 

이런 식의 string을 만드는 것도 가능하고 


SELECT 

ARRAY_TO_STRING(ARRAY_AGG(EMP_NM), ' 구분자 ')

FROM 

사원테이블

WHERE EMP_NO like '2024%';


이런 식으로 다른 string을 넣어

John 구분자 Tom

이렇게 return을 받아 구분하는 것도 가능하다.