MySQL GROUP_CONCAT에서 빈 필드에 구분자 추가하는 방법
빈 필드가 포함된 데이터를 GROUP_CONCAT()으로 하나의 문자열로 합칠 때, 빈 값 사이에 콤마(,)가 연달아 붙어 지저분해지는 경우가 있습니다. 이럴 때는 replace() 함수와 group_concat()을 함께 사용하면 깔끔하게 해결할 수 있습니다. 빈 필드에 대해서는 콤마를 구분자로 표시하도록 처리해 보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int,
Number varchar(100)
);
Query OK, 0 rows affected (2.03 sec)2. 샘플 데이터 삽입하기
insert 명령을 사용해 테이블에 몇 개의 레코드를 입력합니다. 이때 일부러 빈 문자열('')도 함께 넣어 빈 필드 상황을 만들어 줍니다.
mysql> insert into DemoTable values(10,'456'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(11,'345'); Query OK, 1 row affected (0.28 sec) mysql> insert into DemoTable values(10,''); Query OK, 1 row affected (0.63 sec) mysql> insert into DemoTable values(10,'278'); Query OK, 1 row affected (0.35 sec) mysql> insert into DemoTable values(10,''); Query OK, 1 row affected (0.37 sec) mysql> insert into DemoTable values(10,'789'); Query OK, 1 row affected (0.47 sec)
3. 저장된 데이터 확인하기
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+--------+ | Id | Number | +------+--------+ | 10 | 456 | | 11 | 345 | | 10 | | | 10 | 278 | | 10 | | | 10 | 789 | +------+--------+ 6 rows in set (0.00 sec)
Id가 10인 그룹에는 빈 필드가 두 개 포함되어 있는 것을 확인할 수 있습니다.
4. 빈 필드에 구분자를 적용한 GROUP_CONCAT 쿼리
다음은 빈 필드에 구분자를 올바르게 표시하기 위한 쿼리입니다. group_concat() 결과에서 연속된 콤마(,,)를 단일 콤마(,)로 치환하는 방식입니다.
mysql> select Id,replace(group_concat(Number),',,',',') from DemoTable group by Id;
실행 결과는 다음과 같습니다.
+------+----------------------------------------+ | Id | replace(group_concat(Number),',,',',') | +------+----------------------------------------+ | 10 | 456,278,789 | | 11 | 345 | +------+----------------------------------------+ 2 rows in set (0.00 sec)
정리
GROUP_CONCAT()은 빈 문자열도 하나의 값으로 취급하기 때문에, 빈 필드가 있으면 콤마가 중복되어 출력됩니다. 위 예제처럼 replace(group_concat(컬럼), ',,', ',') 형태로 감싸면 연속된 콤마를 제거하여 456,278,789처럼 깔끔한 결과를 얻을 수 있습니다. 참고로 NULL 값은 GROUP_CONCAT에서 자동으로 무시되므로, 빈 문자열과 NULL을 구분해 처리하는 것이 중요합니다.