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 |
'RDBS > MYSQL' 카테고리의 다른 글
[MySQL]데이터베이스 튜닝, 최적의 성능을 위한 5가지 핵심 팁 (30) | 2023.07.22 |
---|---|
[MySQL]테이블 수정하기, ALTER TABLE 총 정리하기 (2) | 2023.07.16 |
[MySQL]동시성 문제를 해결할 FOR UPDATE 알아보기 (1) | 2023.07.09 |
[MySQL]WITH ROLLUP(그룹 소계 함수)와 GROUP BY와 비교하기 (4) | 2023.07.04 |
[MySQL]트랜잭션(Trasaction) 예제로 간단하게 이해하기 (0) | 2023.07.02 |