MySQL에서 GROUP_CONCAT()로 그룹 연결과 조건 설정하기
MySQL에서 여러 행의 값을 하나의 문자열로 합치고 싶다면 GROUP_CONCAT() 함수를 사용하면 됩니다. 이 함수는 WHERE 절과 함께 사용하여 특정 조건에 맞는 레코드만 대상으로 그룹 연결을 수행할 수도 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable813( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserFirstName varchar(100), UserLastName varchar(100) ); Query OK, 0 rows affected (0.49 sec)
샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable813(UserFirstName,UserLastName) values('Adam','Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable813(UserFirstName,UserLastName) values('Chris','Brown');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable813(UserFirstName,UserLastName) values('David','Miller');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable813(UserFirstName,UserLastName) values('Carol','Taylor');
Query OK, 1 row affected (0.22 sec)전체 레코드 조회
SELECT 문을 사용해 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable813;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+---------------+--------------+ | UserId | UserFirstName | UserLastName | +--------+---------------+--------------+ | 1 | Adam | Smith | | 2 | Chris | Brown | | 3 | David | Miller | | 4 | Carol | Taylor | +--------+---------------+--------------+ 4 rows in set (0.00 sec)
조건을 적용한 그룹 연결 실행
이제 WHERE 절로 조건을 설정하여, UserId가 4보다 작은 레코드의 성(Last Name)만 GROUP_CONCAT()으로 연결해 보겠습니다.
mysql> select group_concat(UserLastName) from DemoTable813 where UserId < 4;
실행 결과는 다음과 같습니다.
+----------------------------+ | group_concat(UserLastName) | +----------------------------+ | Smith,Brown,Miller | +----------------------------+ 1 row in set (0.00 sec)
결과를 보면 UserId가 1~3인 레코드의 성인 Smith, Brown, Miller가 쉼표로 구분되어 하나의 문자열로 연결된 것을 확인할 수 있습니다. UserId가 4인 'Taylor'는 조건(WHERE UserId < 4)에 해당하지 않으므로 결과에서 제외되었습니다.
이처럼 GROUP_CONCAT() 함수와 WHERE 절을 함께 활용하면 원하는 조건의 데이터만 손쉽게 하나의 문자열로 묶어 조회할 수 있습니다. 참고로 기본 구분자는 쉼표(,)이며, SEPARATOR 옵션을 사용하면 다른 구분자로 변경할 수도 있습니다.