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

MySQL에서 한 열의 모든 값을 하나로 연결하는 방법 – GROUP_CONCAT 완벽 가이드

MySQL에서 단일 열의 모든 값 연결하기

MySQL에서 특정 열(column)에 있는 모든 값을 하나의 문자열로 합치고 싶다면 GROUP_CONCAT() 함수와 CONCAT() 함수를 함께 사용하면 됩니다. 이 두 함수를 조합하면 각 행의 값을 원하는 형식으로 감싸거나 구분자를 추가한 뒤, 전체를 하나의 결과로 연결할 수 있습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
    );
Query OK, 0 rows affected (0.73 sec)

2. 데이터 삽입

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

mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable(FirstName) values('David');
Query OK, 1 row affected (0.12 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | John      |
|  2 | Larry     |
|  3 | Chris     |
|  4 | Robert    |
|  5 | David     |
+----+-----------+
5 rows in set (0.00 sec)

4. GROUP_CONCAT으로 열의 모든 값 연결

이제 GROUP_CONCAT()CONCAT()을 조합하여 FirstName 열의 모든 값을 큰따옴표로 감싸고 쉼표로 구분된 하나의 문자열로 연결해 보겠습니다.

mysql> select group_concat(concat('"', FirstName, '"')) AS FirstName from DemoTable;

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

+-----------------------------------------+
| FirstName                               |
+-----------------------------------------+
| "John","Larry","Chris","Robert","David" |
+-----------------------------------------+
1 row in set (0.05 sec)

추가 팁: 구분자 변경하기

기본 구분자는 쉼표(,)이지만, SEPARATOR 옵션을 사용하면 원하는 문자로 바꿀 수 있습니다. 예를 들어 세미콜론(;)으로 구분하고 싶다면 아래와 같이 작성합니다.

mysql> select group_concat(FirstName separator '; ') AS FirstName from DemoTable;

또한 값이 많아질 경우 group_concat_max_len 시스템 변수의 기본값(1024바이트)을 초과할 수 있으므로, 필요하다면 다음과 같이 최대 길이를 늘려주는 것이 좋습니다.

SET SESSION group_concat_max_len = 1000000;

이처럼 GROUP_CONCAT()을 활용하면 여러 행에 흩어져 있는 데이터를 손쉽게 하나의 문자열로 병합할 수 있어, 목록 생성이나 CSV 형태의 출력 등 다양한 상황에서 유용하게 사용됩니다.