[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을 받아 구분하는 것도 가능하다.