다중행을 하나의 배열로 조회하기

2023. 3. 30. 15:48Lang/SQL

728x90
반응형

- 환경 : PostgreSql

- 함수 : array_agg / array_to_string

 

 카테고리 테이블

 

 

 

아이템 테이블

 

 

 

 

 

 

 

위와 같은 테이블이 있을 때

 

최종적으로 위와 같은 정보를 화면에 보여주려 한다.

 

 

최근 스프링부트와 리액트를 이용해 웹페이지를 만드는 도중, 팀원이 위와 같은 형태의 데이터를 가져올 때,

먼저 DB에서 카테고리 테이블 데이터를 가져와 List로 만든 후,

해당 카테고리 List를 for문을 돌려 다시 반복적으로 DB에 접속해, 각 카테고리에 해당하는 아이템 테이블 데이터를 조회해온 후, 가져온 데이터를 다시 반복문을 돌려 하나의 문자열로 연결한 뒤 카테고리 객체에 합쳐주는 것을 보았다.

 

이런 경우 db도 불필요하게 많이 접속할 뿐만 아니라 불필요한 반복문을 돌리는 등 번거로운 작업이 많아져 좋지않아 보였는데, 쿼리문으로 한번에 해결할 방법이 없을까 해서 알아보게 된 것.

 

- 다중 데이터 배열로 조회 및 문자열 변환

 1. 먼저 위의 테이블을 그냥 조인했을 경우

select
	cate_name,
	item_name
from category
join item
on category.cate_no = item.cate_no;

조인 결과

 

 

2. 아이템 이름을 배열로 바꾸며 그룹바이 했을 경우

select
	cate_name,
	array_agg(item_name)
from category
join item
on category.cate_no = item.cate_no
group by category.cate_name ;

그룹바이 결과

아이템의 여러 데이터를 하나의 배열로 묶어, 카테고리 명으로 그룹바이 해준다.

 

 

3. 배열을 문자열로 변환

select
	cate_name,
	array_to_string(array_agg(item_name), ',')
from category
left join item
on category.cate_no = item.cate_no
group by category.cate_name;

배열을 문자열로 변환해준다.

728x90
반응형

'Lang > SQL' 카테고리의 다른 글

16. 정규화  (0) 2023.03.28
ex. 기타  (0) 2023.03.28
15. 분석함수  (0) 2023.03.28
14. 트리거  (0) 2023.03.28
13. 데이터 딕셔너리  (0) 2023.03.27