RDBS/MYSQL

[MySQL]GROUP_CONCAT을 활용하여 그룹 별 데이터 나열하기

MoonSta 2023. 7. 11. 16:50

  MySQL에서 사용하는 그룹화 방법 중 하나로 GROUP_CONCAT() 함수를 사용하여, 그룹 내 열을 나열할 수 있습니다.  실제로 자주 사용되는 함수로 이번 포스팅을 읽고 쉽게 이해하셨으면 좋겠습니다.

 


 

어떤 상황에서 사용을 할까?

 

사번 직급 이름
001 인사팀 과장 차OO
002 개발팀 사원 문OO
003 인사팀 대리 김OO
004 개발팀 부장 박OO
005 기획팀 차장 정OO

 

 위와 같이 사번, 팀, 직급, 이름이 있는 직원 테이블이 있다고 치자. 이러한 상황에서 팀별로 그룹화하고, 한 개의 ROW에 팀에 속하는 멤버의 이름을 담고 싶다면 어떻게 처리해야 할까? 우선 추출하고자 하는 데이터를 확인해 보겠습니다.

 


추출할 데이터

 

이름
인사팀 차OO, 김OO
개발팀 문OO, 박OO
기획팀 정OO

 

위와 같이 데이터를 조회하려면 GROUP_CONCAT()를 사용하면 쉽게 처리할 수 있다.

 


 

GROUP_CONCAT() 알아보기

 

GROUP_CONCAT([DISTINCT] expr [,EXPR ...]
             [ORDER BY {unsigned_integer | col_name | expr}
             [SEPARATOR str)

 

GROUP_CONCAT의 기본 구조는 위와 같다. 이제 각각 어떤 것을 의미하는지 알아보도록 하겠습니다. 

 

  • DISTINCT : 필수값은 아니며, 설정 시 중복값을 제거할 수 있다.
  • EXPR : 결합할 열을 지정하고, 쉼표를 통해 여러 개의 열을 지정할 수 있다.
  • ORDER BY : ASC, DESC를 통해 어떤 순서로 정렬할지 결정할 수 있다.
  • separator : 결합 문자 사이의 구분자를 지정할 수 있다.

 

이제 해당 함수를 사용하여 기존 데이터에서 원하는 형태의 데이터를 추출해 보도록 하겠습니다.

 


 

GROUP_CONCAT() 사용하기

 

SELECT team
     , GROUP_CONCAT(team_name)
  FROM MEMBER;

 

이름
인사팀 차OO, 김OO
개발팀 문OO, 박OO
기획팀 정OO