Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL GROUP_CONCAT으로 빈 필드에 구분자 처리하기

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을 구분해 처리하는 것이 중요합니다.