오늘은 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문 예시
자 이렇게 보면, 5개의 행이었던게 하나의 행이 되었고 각 행값이 배열로 들어갔다. 물론 배열 안의 값도 5개이다.
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함수는 이름 그대로 배열을 함수로 바꿔주는 함수이다.
그런데 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함수로 감싸주니, 배열이 각 행으로 돌아간 것을 확인할 수 있다.
주의 할 점은 sum() 등의 통계함수를 같이 이용 할 경우, array의 개수만큼 값이 중복 되어 나올 수 있으므로
주의가 필요하다.
오늘은 이렇게 postgres에서 지원하는 배열관련 함수를 알아보았다. 다음에는 postgres 내에서
값을 비교하는 방법에 대해 알아보자. 보통 like나 = 를 자주 사용하는데,
각 배열간 비교라던가, 배열에 포함이 되어 있는지 여부는 Postgres에서는 any 라는 녀석을 이용해야 하는 경우가
있기 때문이다. 끝.
'데이터베이스 > 쿼리' 카테고리의 다른 글
[Postgres] cmd창에서 psql을 통해 SQL문을 사용해보자. (0) | 2022.02.08 |
---|---|
[Postgres] ANY 연산자에 대해 알아보자. ( feat. 배열 함수 및 IN 연산자) (0) | 2022.02.05 |
[Postgres] 중복값을 체크해보자. ( feat. GROUP BY, HAVING ) (0) | 2022.01.28 |
[Postgres] Procedure(프로시저), Function(함수) 정리 (0) | 2022.01.18 |
[SQL] VIEW TABLE(뷰 테이블) 생성, 조회, 수정, 삭제 (0) | 2022.01.18 |