MySQL에서 Group_concat을 이용해 그룹별로 데이터를 Concatenate 하는 방법입니다.
간단한 예시를 들면 아래와 같이
[Table 1] '부서 테이블' 이 있을 때 [Table 2] 부서별 성명, [Table 3] 직급별 성명으로
그룹지어 나타낼 수 있습니다.
그럼 본격적으로 group_concat 하는 방법을 확인해보겠습니다
-- 테스트용 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; |
GROUP_CONCAT 사용방법
SELECT '그룹 대상 컬럼', GROUP_CONCAT('CONCAT 대상 컬럼') FROM [테이블 명] GROUP BY '그룹 대상 컬럼';
하지만 아래의 예시 쿼리 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; |
-- 2번 쿼리 : 부서별 팀원 이름을 내림차순으로 CROUP_CONCAT SELECT DEPT, GROUP_CONCAT(NAME ORDER BY NAME DESC) AS '부서별 팀원 내림차순' FROM DEPARTMENT GROUP BY DEPT; |
-- 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; |
-- 4번 쿼리 : 구분자를 '$$'로 변경하고 직책별 팀원을 ID 오름차순으로 GROUP_CONCAT SELECT DEPT, GROUP_CONCAT(NAME ORDER BY ID SEPARATOR '$$') AS '직책별 팀원' FROM DEPARTMENT GROUP BY DEPT; |
혹시 전체 쿼리가 필요하신분은 아래 group_concat.sql 파일을 다운로드하시면 됩니다.
궁금한 사항은 댓글남겨주세요.
감사합니다.
참고 :
MySQL 개발자 매뉴얼, https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat
[Virtualbox] 버추얼박스에 설치한 MySQL 접속하기 (3) | 2021.02.12 |
---|---|
[리소스 확장의 2가지 방법] 스케일업(Scale up) 스케일아웃(Scale out) (0) | 2021.02.01 |
[워크벤치 오류 해결방법] Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. (0) | 2020.04.01 |
[MySQL 백업 오류] mysqldump: Got errno 28 on write 해결방법 (0) | 2020.03.04 |
[MySQL] 테이블에서 특정 날짜 이전 데이터 삭제 (2) | 2020.03.03 |