행궁동 데이터 엔지니어

반응형

 

MySQL에서 Group_concat을 이용해 그룹별로 데이터를 Concatenate 하는 방법입니다.

 

간단한 예시를 들면 아래와 같이

[Table 1] '부서 테이블' 이 있을 때 [Table 2] 부서별 성명, [Table 3] 직급별 성명으로 

그룹지어 나타낼 수 있습니다.

 

Group_concat 활용 예시

그럼 본격적으로 group_concat 하는 방법을 확인해보겠습니다

 

Grooup_concat 실습 순서 (MySQL)

  • 1. 부서 테이블 생성
  • 2. Group_concat 확인
  • 예시 코드로 설명하고 전체 쿼리를 담은. sql 파일은 글 제일 아래에 첨부

1. 부서(DEPARTMENT) 테이블 생성 하기

-- 테스트용 DB 생성
CREATE database GROUP_CONCAT;

-- DB 선택
USE GROUP_CONCAT;

-- 테스트용 부서(DEPARTMENT) 테이블 생성
CREATE TABLE IF NOT EXISTS `DEPARTMENT` (
`ID` VARCHAR(8) NOT NULL,
    `DEPT` VARCHAR(10) DEFAULT NULL,
    `RANK` VARCHAR(8) DEFAULT NULL,
    `NAME` VARCHAR(8) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 테스트 데이터 INSERT
INSERT INTO `DEPARTMENT` (`ID`, `DEPT`, `RANK`, `NAME`) VALUES
('A00001', '총무팀', '부장', '유재석'),
('A00002', '총무팀', '대리', '나경은'),
('A00003', '개발팀', '부장', '박명수'),
('A00004', '개발팀', '과장', '정준하'),
('A00005', '개발팀', '대리', '노홍철');

-- 부서 테이블 확인
SELECT * FROM DEPARTMENT;

 

위의 쿼리를 실행하면 위처럼 5명의 정보가 부서테이블에 INSERT 됩니다. (화질 이해해주세요..)

 

2. Group_concat 확인

GROUP_CONCAT 사용방법

SELECT '그룹 대상 컬럼', GROUP_CONCAT('CONCAT 대상 컬럼') FROM [테이블 명]
GROUP BY '그룹 대상 컬럼'; 
  • '그룹 대상 컬럼' : GROUP BY 대상 컬럼 명
  • 'Concat 대상 컬럼' : 그룹 대상 기준으로 CONCAT 할 컬럼 
위처럼 보면 복잡해보이기도 합니다.
하지만 아래의 예시 쿼리 4가지를 직접 실행해보시면
아주 '간단'하게 GROUP_CONCAT 기능을 사용할 수 있다는걸 몸으로 깨달으실겁니다 ^^

기타 : GROUP_CONAT(컬럼명 ORDER BY ID SEPARATOR '::') 와 같은 추가 옵션을 통해

CONCAT 된 값들을 정렬(ORDER)하고
구분자(SEPARATOR)를 기본 설정(DEFAULT) ','에서 '::'로 바꿀 수 있습니다.

아래 예시쿼리 4개에서 다룹니다 ^^

조금더 상세한 설명은 
링크 참조 : https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat

 

쿼리 4개 실습을 통한 GROUP_CONCAT 익히기

-- 1번 쿼리 : 부서별 팀원 GROUP_CONCAT
SELECT DEPT, GROUP_CONCAT(NAME) AS '부서별 팀원' FROM DEPARTMENT
GROUP BY DEPT;

1번 쿼리, 부서별 팀원 GROUP_CONCAT 결과

 

 

--  2번 쿼리 : 부서별 팀원 이름을 내림차순으로 CROUP_CONCAT
SELECT DEPT, GROUP_CONCAT(NAME ORDER BY NAME DESC) AS '부서별 팀원 내림차순' FROM DEPARTMENT
GROUP BY DEPT;

2번 쿼리 : 부서별 팀원 이름을 내림차순으로 GROUP_CONCAT

 

 

-- 3번 쿼리 : 구분자(Separator)를 '::' 로 변경해서 부서별 팀원 GROUP_CONCAT
SELECT DEPT, GROUP_CONCAT(NAME SEPARATOR '::') AS '부서별 팀원' FROM DEPARTMENT
GROUP BY DEPT;

SELECT DEPT, GROUP_CONCAT(NAME ORDER BY ID DESC SEPARATOR '$$') AS '직책별 팀원' FROM DEPARTMENT
GROUP BY DEPT;

3번 쿼리 : 구분자를 '::' 로 변경해서 부서별 팀원 GROUP_CONCAT  / GROUP_CONCAT의 DEFAULT 구분자는 ','

 

-- 4번 쿼리 : 구분자를 '$$'로 변경하고 직책별 팀원을 ID 오름차순으로 GROUP_CONCAT
SELECT DEPT, GROUP_CONCAT(NAME ORDER BY ID SEPARATOR '$$') AS '직책별 팀원' FROM DEPARTMENT
GROUP BY DEPT;

4번 쿼리 실행결과!

 

 

 

혹시 전체 쿼리가 필요하신분은 아래 group_concat.sql 파일을 다운로드하시면 됩니다.

 

group_concat.sql
0.00MB

 

 

궁금한 사항은 댓글남겨주세요.

 

감사합니다.

 

 

참고 :
MySQL 개발자 매뉴얼, https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat
반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band