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

MySQL에서 GROUP_CONCAT으로 여러 행의 값을 쉼표로 구분된 한 줄로 표시하는 방법

MySQL에서 여러 행의 값을 하나의 행으로 합치기

MySQL에서 여러 개의 행(row)에 나뉘어 저장된 값들을 쉼표로 구분된 단일 행으로 변환하고 싶다면 GROUP_CONCAT() 함수와 CONCAT() 함수를 함께 사용하면 됩니다.

GROUP_CONCAT()은 그룹화된 여러 행의 값을 하나의 문자열로 연결해 주는 집계 함수이고, CONCAT()은 각 값 앞뒤에 원하는 문자(예: 대괄호)를 붙이는 데 활용할 수 있습니다.

1. 예제 테이블 생성

먼저 실습용 테이블을 생성합니다.

mysql> create table DemoTable1807
    (
    Id int
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입

INSERT 문을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1807 values(101);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1807 values(102);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1807 values(103);
Query OK, 1 row affected (0.00 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1807;

실행 결과는 다음과 같습니다.

+------+
| Id   |
+------+
|  101 |
|  102 |
|  103 |
+------+
3 rows in set (0.00 sec)

현재까지는 값들이 세 개의 행으로 나뉘어 있는 상태입니다.

4. GROUP_CONCAT과 CONCAT으로 한 줄로 변환

이제 GROUP_CONCAT()CONCAT()을 조합한 쿼리를 실행해 보겠습니다.

mysql> select group_concat(concat('[',Id,']')) from DemoTable1807;

실행 결과는 다음과 같습니다.

+----------------------------------+
| group_concat(concat('[',Id,']')) |
+----------------------------------+
| [101],[102],[103]                |
+----------------------------------+
1 row in set (0.00 sec)

결과 설명

위 쿼리가 동작하는 원리를 살펴보면 다음과 같습니다.

CONCAT('[', Id, ']')는 각 행의 Id 값 앞뒤에 대괄호를 붙여 [101], [102], [103] 형태로 만듭니다. 이어서 GROUP_CONCAT()이 이 값들을 기본 구분자인 쉼표(,)로 연결하여 최종적으로 [101],[102],[103]이라는 하나의 문자열을 반환합니다.

만약 구분자를 다른 문자로 바꾸고 싶다면 GROUP_CONCAT(concat('[',Id,']') SEPARATOR ';')처럼 SEPARATOR 옵션을 지정하면 됩니다. 또한 대량의 데이터를 처리할 때는 group_concat_max_len 시스템 변수의 기본값(1024바이트)이 결과를 잘라낼 수 있으므로 필요에 따라 값을 늘려주는 것이 좋습니다.