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

MySQL에서 GROUP_CONCAT() 함수로 여러 행의 데이터를 하나로 연결하는 방법

MySQL에서 여러 행에 흩어져 있는 데이터를 하나의 문자열로 합치고 싶다면 GROUP_CONCAT() 함수가 가장 유용한 해결책입니다. 이 글에서는 실제 예제를 통해 테이블 생성부터 저장 프로시저(Stored Procedure) 작성, 그리고 조건에 맞는 여러 행을 연결하는 과정까지 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable (CountryName varchar(100));
Query OK, 0 rows affected (1.01 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용해 몇 개의 국가명 레코드를 추가합니다.

mysql> insert into DemoTable values('US');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('AUS');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('UK');
Query OK, 1 row affected (0.19 sec)

3. 데이터 조회하기

SELECT 문으로 테이블에 저장된 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable;

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

+-------------+
| CountryName |
+-------------+
| US          |
| AUS         |
| UK          |
+-------------+
3 rows in set (0.00 sec)

4. 저장 프로시저로 여러 행 연결하기

여러 행을 하나의 값으로 연결하려면 GROUP_CONCAT() 함수를 사용합니다. 아래에서는 검색 패턴과 출력 값을 매개변수로 받는 저장 프로시저를 생성했습니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE searchDemo(in stringValue varchar(255), out output text)
    BEGIN
      select group_concat(distinct CountryName order by CountryName) into output from DemoTable where
      CountryName like stringValue;
    END
    //
Query OK, 0 rows affected (0.18 sec)
mysql> DELIMITER ;

이 프로시저의 핵심은 group_concat(distinct CountryName order by CountryName) 부분입니다. DISTINCT로 중복된 국가명을 제거하고, ORDER BY로 결과를 알파벳 순서로 정렬한 뒤 쉼표(,)로 구분된 하나의 문자열로 연결합니다. WHERE 절의 LIKE 조건을 통해 원하는 패턴과 일치하는 행만 대상으로 삼을 수 있습니다.

5. 프로시저 호출 및 결과 확인하기

CALL 명령어로 저장 프로시저를 호출합니다. 여기서는 'U'로 시작하는 국가명을 검색해 보겠습니다.

mysql> call searchDemo('U%',@output);
Query OK, 1 row affected, 2 warnings (0.04 sec)

@output 변수에 담긴 결과값을 확인합니다.

mysql> select @output;

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

+---------+
| @output |
+---------+
| UK,US   |
+---------+
1 row in set (0.00 sec)

마무리

이처럼 GROUP_CONCAT() 함수를 활용하면 여러 행에 나뉜 데이터를 'UK,US'처럼 하나의 문자열로 손쉽게 병합할 수 있습니다. 특히 저장 프로시저와 결합하면 검색 조건을 동적으로 전달할 수 있어 재사용성이 뛰어납니다. 참고로 GROUP_CONCAT()에는 기본 최대 길이 제한(group_concat_max_len, 기본값 1024바이트)이 있으므로, 대량의 데이터를 연결할 때는 해당 시스템 변수를 적절히 늘려주는 것이 좋습니다.