[MySQL] GROUP_CONCAT,

Hyunjun Kim·2025년 8월 7일
0

SQL

목록 보기
71/90

데이터 분석이나 백엔드 개발을 하다 보면, 특정 그룹별로 문자열을 한 줄로 합쳐서 보고 싶을 때가 종종 있다. 예를 들어, "고객별로 구매한 상품명을 한 줄로 보고 싶다"는 요구처럼 말이다.

이럴 때 유용한 함수가 바로 GROUP_CONCAT()이다. 이 글에서는 GROUP_CONCAT() 함수의 다양한 옵션들을 실무 예제 중심으로 정리해본다.


📊 예제 테이블: purchase_log

SELECT * FROM purchase_log;
customer_idproduct_name
A001노트북
A001키보드
A002마우스
A001마우스
A002키보드

1️⃣ 기본 사용법: 문자열을 하나로 합치기

SELECT customer_id, GROUP_CONCAT(product_name) AS purchased_products
FROM purchase_log
GROUP BY customer_id;

📌 결과:

customer_idpurchased_products
A001노트북,키보드,마우스
A002마우스,키보드

2️⃣ 구분자 변경하기: SEPARATOR

SELECT customer_id, GROUP_CONCAT(product_name SEPARATOR ' / ') AS purchased_products
FROM purchase_log
GROUP BY customer_id;

📌 결과:

customer_idpurchased_products
A001노트북 / 키보드 / 마우스
A002마우스 / 키보드

3️⃣ 중복 제거: DISTINCT

SELECT customer_id, GROUP_CONCAT(DISTINCT product_name) AS unique_products
FROM purchase_log
GROUP BY customer_id;

📌 결과:

customer_idunique_products
A001노트북,키보드,마우스
A002마우스,키보드

4️⃣ 정렬된 문자열로 보기: ORDER BY

SELECT customer_id, GROUP_CONCAT(DISTINCT product_name ORDER BY product_name ASC) AS sorted_products
FROM purchase_log
GROUP BY customer_id;

📌 결과:

customer_idsorted_products
A001노트북,마우스,키보드
A002마우스,키보드

📘 요약 정리

기능구문 예시
기본 사용GROUP_CONCAT(column)
구분자 변경GROUP_CONCAT(column SEPARATOR '구분자')
중복 제거GROUP_CONCAT(DISTINCT column)
문자열 정렬GROUP_CONCAT(column ORDER BY column)

🔄 다른 DBMS에서의 대체 함수

  • Oracle 10g: WM_CONCAT()
  • Oracle 11g 이상: LISTAGG()
  • PostgreSQL: STRING_AGG(column, '구분자')
  • SQL Server: STRING_AGG(column, '구분자') (SQL Server 2017 이상)

📚 참고 자료


💡 실무 TIP

문자열 길이가 너무 길어질 경우, GROUP_CONCAT()는 최대 길이 제한(group_concat_max_len)에 의해 잘릴 수 있으므로 아래 설정 확인 필요:

-- 현재 제한값 확인
SHOW VARIABLES LIKE 'group_concat_max_len';

-- 필요시 설정 (예: 세션 단위로 10,000으로 변경)
SET SESSION group_concat_max_len = 10000;
profile
Data Analytics Engineer 가 되

0개의 댓글