이번에는 여러 행의 값을 하나의 문자열로 합치는 데 유용한 함수인 GROUP_CONCAT()에 대해 배워봅시다! 이 함수는 MySQL에서 지원하는 집계 함수로, GROUP BY와 함께 자주 사용되며, 고객별, 직원별, 배우별 등 여러 항목을 하나로 정리할 때 유용합니다.
💡 모든 예시는 company_db의 employees, projects 테이블 기반입니다.
✅ 기본 문법
GROUP_CONCAT(expression [ORDER BY ...] [SEPARATOR '구분자'])
expression: 문자열로 연결할 컬럼
ORDER BY: 연결 순서 지정 (선택)
SEPARATOR: 연결 사이에 넣을 구분자 (기본은 쉼표)
1. 예제 ① 직원별 수행한 프로젝트 목록 정리
SELECT e.emp_id, e.first_name,
GROUP_CONCAT(p.project_name ORDER BY p.project_name SEPARATOR ', ') AS project_list
FROM employees e
LEFT JOIN projects p ON e.emp_id = p.emp_id
GROUP BY e.emp_id, e.first_name;
예시 결과:
| emp_id | first_name | project_list |
|---|
| 1 | Alice | AI Platform, Data Lake |
| 2 | Bob | Rebranding |
| 3 | Charlie | Automation |
| 4 | Diana | NULL |
2. 예제 ② 부서별 직원 이름 나열
SELECT department,
GROUP_CONCAT(first_name ORDER BY first_name SEPARATOR ' / ') AS member_names
FROM employees
GROUP BY department;
예시 결과:
| department | member_names |
|---|
| Engineering | Alice / Charlie |
| Marketing | Bob |
| HR | Diana |
3. 예제 ③ 프로젝트 예산 등급별 프로젝트 목록
SELECT
CASE
WHEN budget >= 90000 THEN 'A'
WHEN budget >= 70000 THEN 'B'
ELSE 'C'
END AS budget_rank,
GROUP_CONCAT(project_name ORDER BY project_name SEPARATOR '; ') AS project_names
FROM projects
GROUP BY budget_rank;
예시 결과:
| budget_rank | project_names |
|---|
| A | AI Platform |
| B | Data Lake |
| C | Automation; Rebranding |
✅ 정리 요약: GROUP_CONCAT 핵심 포인트
| 기능 | 설명 |
|---|
| 문자열 연결 집계 | 하나의 그룹 안에 여러 값을 하나의 문자열로 이어붙임 |
SEPARATOR 옵션 지원 | 기본 쉼표 외에 원하는 구분자로 값 구분 가능 |
| 정렬 기능 지원 | ORDER BY를 통해 연결 순서 지정 가능 |
| NULL 처리 | 연결할 값이 NULL이면 해당 항목은 무시됨 |
지금까지 advanced한 SQL 공부하느라 고생하셨습니다! 다음부터는 expert가 되기 위한 SQL 문법들을 알아보아요!!!