GROUP_CONCAT() 함수로 여러 행을 한 줄로 합치기
MySQL에서 여러 행에 흩어져 있는 값들을 하나의 행으로 가져오고, 각 값을 쉼표(,)로 구분하여 표시하려면 GROUP_CONCAT() 함수를 사용하면 됩니다.
이 경우 GROUP BY 절을 사용할 필요가 없습니다. GROUP_CONCAT() 자체가 더 간결하고 빠른 해결책이기 때문입니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable1371
-> (
-> Id int,
-> CountryName varchar(40)
-> );
Query OK, 0 rows affected (0.89 sec)2. 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1371 values(100,'US'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable1371 values(100,'UK'); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable1371 values(101,'AUS'); Query OK, 1 row affected (0.27 sec) mysql> insert into DemoTable1371 values(101,'Angola'); Query OK, 1 row affected (0.14 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1371;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+-------------+ | Id | CountryName | +------+-------------+ | 100 | US | | 100 | UK | | 101 | AUS | | 101 | Angola | +------+-------------+ 4 rows in set (0.00 sec)
4. GROUP_CONCAT()으로 하나의 행으로 합치기
모든 행의 값을 가져와 쉼표로 구분된 단일 행으로 표시하는 쿼리는 다음과 같습니다.
mysql> select group_concat(CountryName separator ',') from DemoTable1371;
실행 결과는 아래와 같습니다.
+-----------------------------------------+ | group_concat(CountryName separator ',') | +-----------------------------------------+ | US,UK,AUS,Angola | +-----------------------------------------+ 1 row in set (0.00 sec)
정리
GROUP_CONCAT() 함수는 여러 행의 문자열 값을 하나의 문자열로 결합할 때 매우 유용합니다. 기본 구분자는 쉼표이며, SEPARATOR 옵션을 사용하면 원하는 구분자를 지정할 수도 있습니다. 또한 DISTINCT, ORDER BY 등의 옵션과 함께 활용하면 중복 제거나 정렬된 결과를 얻을 수 있어 실무에서 다양하게 응용됩니다.