본문 바로가기
카테고리 없음

[PostgreSQL] ARRAY 기본적인 배열함수 :: unnest, array_agg, array_to_string

by 게으른공장장 2020. 6. 23.

PostgreSQL은 다양한 Array 관련 함수를 지원한다.

array 데이터 필드를 사용하지 않더라도, 쿼리에서 group by와 array 함수를 함께 사용하면 멋진 결과를 만들 수 있다.

오늘은 자주 사용하는 array 함수 몇가지를 소개하도록 하겠다.

 

array 데이터를 row로 변환하기 :: unnest()

select col1, unnest(col2) as col2 from array_test ;

col1|unnest|
----|------|
채소  |배추    |
채소  |상추    |
채소  |양파    |
과일  |배     |
과일  |귤     |
과일  |수박    |
과일  |참외    |
과일  |복숭아   |

unnest 함수는 배열의 개수만큼 row를 풀어서 표현해 준다.

array데이터 취급 시 많이 사용하는 함수이다. 빠르고 편리하긴 하나 sum() 등의 통계함수와 같이 사용하면 array의 개수만큼 값이 중복되어 원치 않는 값이 발생 할 수 있으므로 유의하자.

 

row 를 array 또는 string으로 변환하기 :: array_agg , array_to_string

with tmp as (
	select col1, unnest(col2) as col2 from array_test
)

select col1, array_agg(col2), array_to_string(array_agg(col2),',')
  from tmp z
 group by col1;
 
 
col1|array_agg      |array_to_string|
----|---------------|---------------|
과일  |{배,귤,수박,참외,복숭아}|배,귤,수박,참외,복숭아  |
채소  |{배추,상추,양파}     |배추,상추,양파       |

 

array_agg 는 group by와 함께 사용하는 함수이다. group by 된 값들을 array로 반환한다. 

distinct  order by 를 함께 이용하면 중복제거된 값을 구하거나, 원하는 순서로 정렬하여 array를 만들 수 있다.

 ex : array_agg(distinct col2 order by col2)

 

 

string 을 특정 문자로 분리하여 array로 변환 (split) :: string_to_array

with tmp as (
	select '귤,배,복숭아,수박,참외' as col1
)
select col1
     , string_to_array(col1,',') 
  from tmp
     
  
col1         |string_to_array|
-------------|---------------|
귤,배,복숭아,수박,참외|{귤,배,복숭아,수박,참외}|

 

PostgreSQL에 조금더 익숙해진 후 더욱 유용한 array함수를 소개하도록 하겠다

댓글