데이터 분석이나 백엔드 개발을 하다 보면, 특정 그룹별로 문자열을 한 줄로 합쳐서 보고 싶을 때가 종종 있다. 예를 들어, "고객별로 구매한 상품명을 한 줄로 보고 싶다"는 요구처럼 말이다.
이럴 때 유용한 함수가 바로 GROUP_CONCAT()이다. 이 글에서는 GROUP_CONCAT() 함수의 다양한 옵션들을 실무 예제 중심으로 정리해본다.
purchase_logSELECT * FROM purchase_log;
| customer_id | product_name |
|---|---|
| A001 | 노트북 |
| A001 | 키보드 |
| A002 | 마우스 |
| A001 | 마우스 |
| A002 | 키보드 |
SELECT customer_id, GROUP_CONCAT(product_name) AS purchased_products
FROM purchase_log
GROUP BY customer_id;
📌 결과:
| customer_id | purchased_products |
|---|---|
| A001 | 노트북,키보드,마우스 |
| A002 | 마우스,키보드 |
SEPARATORSELECT customer_id, GROUP_CONCAT(product_name SEPARATOR ' / ') AS purchased_products
FROM purchase_log
GROUP BY customer_id;
📌 결과:
| customer_id | purchased_products |
|---|---|
| A001 | 노트북 / 키보드 / 마우스 |
| A002 | 마우스 / 키보드 |
DISTINCTSELECT customer_id, GROUP_CONCAT(DISTINCT product_name) AS unique_products
FROM purchase_log
GROUP BY customer_id;
📌 결과:
| customer_id | unique_products |
|---|---|
| A001 | 노트북,키보드,마우스 |
| A002 | 마우스,키보드 |
ORDER BYSELECT customer_id, GROUP_CONCAT(DISTINCT product_name ORDER BY product_name ASC) AS sorted_products
FROM purchase_log
GROUP BY customer_id;
📌 결과:
| customer_id | sorted_products |
|---|---|
| A001 | 노트북,마우스,키보드 |
| A002 | 마우스,키보드 |
| 기능 | 구문 예시 |
|---|---|
| 기본 사용 | GROUP_CONCAT(column) |
| 구분자 변경 | GROUP_CONCAT(column SEPARATOR '구분자') |
| 중복 제거 | GROUP_CONCAT(DISTINCT column) |
| 문자열 정렬 | GROUP_CONCAT(column ORDER BY column) |
WM_CONCAT()LISTAGG()STRING_AGG(column, '구분자')STRING_AGG(column, '구분자') (SQL Server 2017 이상)문자열 길이가 너무 길어질 경우, GROUP_CONCAT()는 최대 길이 제한(group_concat_max_len)에 의해 잘릴 수 있으므로 아래 설정 확인 필요:
-- 현재 제한값 확인
SHOW VARIABLES LIKE 'group_concat_max_len';
-- 필요시 설정 (예: 세션 단위로 10,000으로 변경)
SET SESSION group_concat_max_len = 10000;