MySQL에서는 GROUP_CONCAT 함수 내부에 CONCAT 함수를 조합하여 여러 레코드의 값을 하나의 문자열로 깔끔하게 연결할 수 있습니다. 이번 글에서는 예제 테이블을 만들고, 두 함수를 함께 사용하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table GroupConcatenateDemo
-> (
-> id int,
-> FirstName varchar(100),
-> Score int
-> );
Query OK, 0 rows affected (0.61 sec)
2. 레코드 삽입하기
이제 테이블에 몇 개의 레코드를 삽입해 보겠습니다.
mysql> insert into GroupConcatenateDemo values(1,'John',94);
Query OK, 1 row affected (0.16 sec)
mysql> insert into GroupConcatenateDemo values(2,'Bob',98);
Query OK, 1 row affected (0.16 sec)
mysql> insert into GroupConcatenateDemo values(4,'Carol',100);
Query OK, 1 row affected (0.20 sec)
테이블에 저장된 레코드를 확인하려면 다음 쿼리를 실행합니다.
mysql> select *from GroupConcatenateDemo;
실행 결과는 다음과 같습니다.
+------+-----------+-------+
| id | FirstName | Score |
+------+-----------+-------+
| 1 | John | 94 |
| 2 | Bob | 98 |
| 3 | Carol | 100 |
+------+-----------+-------+
3 rows in set (0.00 sec)
3. GROUP_CONCAT 기본 문법
레코드를 연결할 때 사용하는 기본 문법은 다음과 같습니다.
Select column_name1,
group_concat(concat(`Column_name2`,'separatorValue',`Column_name3`) separator 'separatorValue')
as AliasName from yourTableName group by column_name1;
여기서 concat()은 각 행 내부의 여러 컬럼 값을 하나로 합치고, group_concat()은 그룹으로 묶인 여러 행의 결과를 지정한 구분자(separator)로 이어 붙입니다.
4. 실제 적용 예제
다음은 이름(FirstName)과 점수(Score)를 콜론(:)으로 연결하고, 각 결과를 쉼표(,)로 구분하여 조회하는 예제입니다.
mysql> SELECT
-> id,group_concat(concat(`FirstName`,':',`score`) separator ',')
-> as FirstNameAndScore from GroupConcatenateDemo group by id;
아래 출력 결과를 보면 레코드가 성공적으로 연결된 것을 확인할 수 있습니다.
+------+-------------------+
| id | FirstNameAndScore |
+------+-------------------+
| 1 | John:94 |
| 2 | Bob:98 |
| 3 | Carol:100 |
+------+-------------------+
3 rows in set (0.00 sec)
정리
이처럼 CONCAT과 GROUP_CONCAT을 함께 사용하면 행 단위로 값을 합친 뒤, 그룹 단위로 하나의 문자열로 만들 수 있습니다. 구분자를 자유롭게 지정할 수 있어 CSV 형태의 데이터 추출이나 목록형 조회 결과를 만들 때 매우 유용합니다.