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함수를 소개하도록 하겠다
댓글