MySQL에서 GROUP BY와 함께 문자열을 연결하려면 GROUP_CONCAT() 함수를 사용해야 합니다. 이때 SEPARATOR 매개변수를 지정하면 콤마(','), 공백(' ') 등 원하는 구분 기호를 자유롭게 설정할 수 있습니다.
기본 문법
SELECT yourColumnName1, GROUP_CONCAT(yourColumnName2 SEPARATOR 'yourValue') AS anyVariableName FROM yourTableName GROUP BY yourColumnName1;
예제 테이블 생성
위 문법을 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다:
mysql> create table GroupConcatenateDemo
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.99 sec)
데이터 삽입
INSERT 명령어를 사용하여 테이블에 레코드를 삽입합니다:
mysql> insert into GroupConcatenateDemo values(10,'Larry');
Query OK, 1 row affected (0.41 sec)
mysql> insert into GroupConcatenateDemo values(11,'Mike');
Query OK, 1 row affected (0.18 sec)
mysql> insert into GroupConcatenateDemo values(12,'John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into GroupConcatenateDemo values(10,'Elon');
Query OK, 1 row affected (0.63 sec)
mysql> insert into GroupConcatenateDemo values(10,'Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into GroupConcatenateDemo values(11,'Sam');
Query OK, 1 row affected (0.14 sec)
전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다:
mysql> select *from GroupConcatenateDemo;
실행 결과는 다음과 같습니다:
+------+-------+
| Id | Name |
+------+-------+
| 10 | Larry |
| 11 | Mike |
| 12 | John |
| 10 | Elon |
| 10 | Bob |
| 11 | Sam |
+------+-------+
6 rows in set (0.00 sec)
GROUP BY와 GROUP_CONCAT()으로 문자열 연결하기
이제 Id 컬럼을 기준으로 GROUP BY를 수행하고, GROUP_CONCAT() 함수를 사용하여 각 그룹에 속한 이름들을 하나의 문자열로 연결해 보겠습니다. 쿼리는 다음과 같습니다:
mysql> select Id, group_concat(Name SEPARATOR ',') as GroupConcatDemo from GroupConcatenateDemo
-> group by Id;
실행 결과는 다음과 같습니다:
+------+-----------------+
| Id | GroupConcatDemo |
+------+-----------------+
| 10 | Larry,Elon,Bob |
| 11 | Mike,Sam |
| 12 | John |
+------+-----------------+
3 rows in set (0.00 sec)
위 결과에서 볼 수 있듯이, 동일한 Id를 가진 이름들이 콤마(',')로 구분되어 하나의 문자열로 연결되었습니다. SEPARATOR 값을 변경하면 공백이나 세미콜론 등 다른 구분 기호도 손쉽게 적용할 수 있으므로, 상황에 맞게 활용하시기 바랍니다.