MySQL GROUP_CONCAT 결과를 한 줄로 조회하기

MYSQL에서 데이터를 한 줄의 문자열로 붙여서 나열할 때 GROUP_CONCAT을 사용할 수 있습니다. 그룹화된 여러 값을 구분자와 정렬 규칙에 따라 하나의 문자열로 합치는 방법에 대해 알아보겠습니다.

샘플 테이블

GROUP_CONCAT 샘플 테이블
employee
emp_id이름부서직무
1김하늘플랫폼개발팀백엔드 개발자
2박지우플랫폼개발팀백엔드 개발자
3이서준인프라운영팀시스템 엔지니어
4최민서인프라운영팀DBA
5정도윤보안기술팀보안 엔지니어

skill
skill_id기술명
1Java
2Spring
3MySQL
4Docker
5Kubernetes
6Linux
7Nginx
8Python
9Redis
10Bash

employee_skill
emp_idskill_id숙련도
115
124
134
143
164
214
223
293
365
3104
373
343
435
494
464
564
574
533
542

한 사람의 기술을 한 줄로 조회

SELECT
  e.emp_id,
  e.이름,
  GROUP_CONCAT(s.기술명 ORDER BY s.기술명 SEPARATOR ', ') AS 보유기술
FROM employee e
JOIN employee_skill es ON es.emp_id = e.emp_id
JOIN skill s ON s.skill_id = es.skill_id
GROUP BY e.emp_id, e.이름
ORDER BY e.emp_id;

세 개의 테이블은 emp_id와 skill_id로 연결되어 있기 때문에 JOIN으로 붙여주고 GROUP_CONCAT으로 기술명을 쉼표(,) 구분자로 연결해준 형태입니다.

sql group concat (4)

기술에 숙련도 라벨을 달아주기

SELECT
  e.이름,
  GROUP_CONCAT(CONCAT(s.기술명, '(', es.숙련도, ')')
               ORDER BY es.숙련도 DESC, s.기술명 ASC
               SEPARATOR ', ') AS 기술_라벨형
FROM employee e
JOIN employee_skill es ON es.emp_id = e.emp_id
JOIN skill s ON s.skill_id = es.skill_id
GROUP BY e.이름;

보유 기술의 숙련도 수준을 내림차순으로 같이 표기하는 방식입니다. GROUP_CONCAT 안에 CONCAT을 또 써서 숙련도 정보를 붙였습니다.

sql group concat (5)

특정 기술을 가진 사람 목록

SELECT
  s.기술명,
  GROUP_CONCAT(e.이름 ORDER BY e.이름 SEPARATOR ', ') AS 직원들
FROM skill s
JOIN employee_skill es ON es.skill_id = s.skill_id
JOIN employee e ON e.emp_id = es.emp_id
GROUP BY s.기술명;

특정 기술을 가진 사람의 목록을 출력하기 위한 쿼리입니다.

sql group concat (6)

댓글 남기기